• shell基础


    <1>.什么是Shell?

    shell解释:引用别人的话说:“Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。”

      简而言之,shell是命令解释器之外的一种编程语言。

    shell可以做什么:批处理、自动化管理、监控管理、日志数据处理、自动数据备份等等。

    <2>.shell的组成部分和执行方式

    1、shell脚本组成部分

        1)注释:#开头

        2)命令:shell基本语法

        3)变量:shell支持字符串变量和整数变量。

        4)结构控制语句:流程控制语句

    2、执行方式

    两种执行方式

        1)sh shelltest

        2)./shelltest

    说明:两种执行方式的权限控制不一样。

    <3>语法说明

    1、注释、指定执行方式、退出

    • 注释等说明信息,要以#开头。
    • 脚本的第一行调用时表明基于bash的方式执行:#!/bin/bash(说明:如果系统默认是bash执行,不写也行)
    • 退出时最好写上:exit 0

    示例:

    #!/bin/bash
    # 我是注释 :-e特殊字符(a、
    )转义
    echo -e "Hello World!a
    " 
    exit 0

    2、变量和变量的计算

    定义变量:name=aa

    说明:

    • name:变量名,变量名用小写字母命名
    • =:赋值符号,两边绝对不能有空格
    • aa:可以为字符串,可以为数值

    引用变量:$name(表示引用name的值)

    变量的数值计算:

            语法:需要使用双层小括号括起来,模运算:% 幂运算:**

    示例:实现a + b

    #!/bin/bash
    a=10
    b=20
    echo $(($a+$b)) 
    echo $((100+20-20*2)) 

    ./shelltest执行,结果为:

    30
    80

    字符串操作:

    复制代码
    ${#string} : 计算长度
    
    ${string:position} : 从position开始截取
    
    ${string:position:length} : 从position开始截取length长度
    
    ${string#substring} : 删除开始的字符串
    复制代码

    示例:

    ${string#I*.} : 删除从I到.的所有字符(最短匹配)
    
    ${string##I*} : 删除开始I到.所有字符(最长匹配)

    3、语句判断

    1)判断语句test命令

    可以使用:man test查看test的语法说明。

    以下为test的几个基本使用:

    复制代码
    -f:文件是否存在
    
    -d:目录是否存在
    
    -r:文件是否有读权限
    
    -w:文件是否有写权限
    
    -x:文件是否有执行权限
    复制代码

    示例:

    #!/bin/bash
    filename=/home/zhangsan
    test -f $filename && echo 'exist' || 'not exist'

    通过./shelltest执行,会显示'not exist'

    2)[]判断

    注意:

    1)中括号中必须用空格隔开

    2)中括号中的变量最好以双引号括起来

    3)中括号中的常数,最好以单引号括起来

    eg:
    [ "$a" == "$b" ]&&echo 'yes' || echo 'no'
    [ '12' == '10' ]&&echo 'yes' || echo 'no'

    4、条件分支

    三种条件分支:单分支、双分支、多分支

    1)单分支判断

    语法:

    if[];then
    echo 'aa'
    fi

    示例:

    #!/bin/bash
    filename=/home/asdf
    if[ test -f $filename ];then
      echo 'aa'
    fi

    2)双分支判断

    #!/bin/bash
    if[];then
      echo 'aa'
    else
      echo 'bb'
    fi

    3)多分支判断

    多分支判断有两种方式:if elif else方式、case in方式。

    第一种:if elif else方式

    示例:

    复制代码
    #!/bin/bash
    if[];then
      echo 'aa'
    elif
      echo 'bb'
    elif
      echo 'cc'
    fi
    复制代码

    第二种:case in方式

    语法:

    case $name in
    1);;
    echo 'aa'
    esac

    多分支示例:

    从终端接收一个输入参数,然后进行条件判断。(read:接收用户输入)

    复制代码
    #!/bin/bash
    echo '输入一个值:'
    read number
    if[ $number == 1 ];then
      echo '2'
    elif[ $number == 2 ];then
      echo '2'
    else
      echo '错误'
    fi
    复制代码

    示例,查看硬件信息脚本:

    复制代码
    #!/bin/bash
    echo '输入一个值:'
    read hd
    if[ $hd == cpu ];then
      cat /proc/cpuinfo
    elif[ $hd == mem ];then
      cat /proc/meminfo
    elif[ $hd == hard ];then
      df -h
    else
      echo '错误'
    fi
    复制代码

    case in方式的示例:

    复制代码
    #!/bin/bash
    echo '输入一个值:'
    read number
    case $number in
    1)
      echo '1';;
    2)
      echo '2';;
    *)
      echo '错误';;
    esac
    复制代码

    5、循环语句

    循环语句有三种方式:while do循环、until do循环、for循环

    说明:[]中要使用以下转义符号;(())不需要转义。shell推荐使用[]。

    [] : -eq -ne -gt -ge -lt -le

    (()): == != > >= < <=

    1)while do循环

    说明:示例中[ $i -eq 5 ] 等价于 (($i==5))。

    #!/bin/bash
    i=10
    while [ $i -eq 5 ];do 
      echo $i;
      ((i--));
    done;

    2)until do循环:直到..才执行

    #!/bin/bash
    i=10
    until (($a<0));do
      echo $i;
      ((i--));
    done;

    3)for循环

    #!/bin/bash
    for((i=1;i<=10;i++));do
      echo $i
    done;

    6、函数(方法)

    参考示例,文件名为shelltest

    复制代码
    #!/bin/bash
    function print(){
      echo '$1'
    }
    
    case $1 in
    "one")
      print 1;;
    "two")
      print 2;;
    *)
      print '错误';;
    esac
    复制代码

    执行的时候可以直接通过控制台直接传参:

    $ ./shelltest one

    以下执行结果为:2

    $ ./shelltest two
  • 相关阅读:
    django大全
    centos 下安装python3.6.2
    爬虫基础知识与简单爬虫实现
    HDU5950 Recursive sequence (矩阵快速幂加速递推) (2016ACM/ICPC亚洲赛区沈阳站 Problem C)
    ZOJ5833 Tournament(递归打表)
    ZOJ4067 Books(贪心)
    ZOJ4062 Plants vs. Zombies(二分+贪心)
    ZOJ4060 Flippy Sequence(思维题)
    洛谷P2568 GCD(线性筛法)
    2018.11.6刷题记录
  • 原文地址:https://www.cnblogs.com/wpf-7/p/9621513.html
Copyright © 2020-2023  润新知