• shell基础语法总结


    文中各个命令可以拿来直接进行测试,可直接在在线测试shell命令进行测试。

    1. 变量

    一般用法
    a=1
    echo "a="${a} #使用变量时用${}
    echo "a="$a #$a在遇到$ab时,会出错,因此第一种较好
    
    • 1
    • 2
    • 3
    除了显式地直接赋值,还可以用语句给变量赋值
    ls
    b=`ls /box` #直接将命令执行结果赋值给变量
    echo "b="${b}
    b=$(ls /box) #直接将命令执行结果赋值给变量
    echo "b="${b}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    定义只读变量
    b readonly
    b=2 #为只读变量重新赋值,报错
    
    • 1
    • 2
    删除变量
    unset a
    echo "a="${a}
    
    • 1
    • 2

    2. 数组

    定义数组
    array=(1 2 3 4 5) # 数组用括号包围起来
    echo "array[2]="${array[2]} 
    
    • 1
    • 2
    打印数组
    echo "数组所有元素为:"${array[*]}
    
    • 1
    打印数组长度
    echo "数组长度为:"${#array[*]}
    
    • 1
    设置数组元素值
    array[0]=99
    echo "数组第一个元素为:"${array[0]}
    
    • 1
    • 2

    3. 字符串

    字符串定义
    str=1 #不加引号,类型为字符串类型
    echo "str="${str}
    str="1" 
    echo "str="${str}#加双引号,类型为字符串类型
    str='1'
    echo "str="${str}#加单引号,类型为字符串类型。单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;不能嵌套
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    字符串长度
    str1="abcdefg"
    echo "str的长度为:"${#str1}
    echo "str的第2个字符开始,连续3个字符为:"${str1:1:3}
    
    • 1
    • 2
    • 3

    4. 运算符

    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
    c=`expr 2 + 2` #注意数字之间的空格
    echo "2+2="${c}
    c=`expr 2 - 2`
    echo "2-2="${c}
    c=`expr 2 \* 2` # 乘号(*)前边必须加反斜杠(\)才能实现乘法运算;
    echo "2*2="${c}
    c=`expr 2 / 2`
    echo "2/2="${c}
    c=`expr 2 % 2`
    echo "2%2="${c}
    c=`expr 2 == 2`
    echo "2==2?"${c}
    c=`expr 2 != 2`
    echo "2!=2?"${c}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

    $a -eq $b #判断等于
    $a -ne $b #判断不等
    $a -lt $b #判断小于
    $a -gt $b #判断大于
    $a -eq $b #判断等于
    $a -le $b #判断小于等于
    $a -ge $b #判断大于等于

    布尔运算符
    if [ !false ] #无空格
    then
    echo "true"
    else
    echo "false"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    b1=1
    b2=3
    if [ ${b1} -gt 0 -o ${b2} -gt 0 ] # -o表示 或
    then 
      echo "b1>0或b2>0"
    else
      echo "false"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    if [ ${b1} -gt 0 -a ${b2} -gt 0 ]
    then 
       echo "b1>0且b2>0"
    else
       echo "false"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    &&
    if [[ ${b1} -gt 0 && ${b2} -gt 0 ]] #注意空格
    then
      echo "b1>0 && b2>0"
    else
      echo "false"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    ||
    if [[ ${b1} -gt 0 || ${b2} -gt 0 ]] #注意空格
    then
      echo "b1>0 || b2>0"
    else
      echo "false"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    字符串判断
    #判等
    if [ ${b1} = ${b2} ] # 注意这里是一个=
    then 
       echo "b1==b2"
    else
       echo "false"
    fi
    
    #判断不等
    if [ $[b1] != ${b2} ]
    then
       echo "b1 != b2"
    else
       echo "false"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    检测字符串是否不为空,
    if [ ${b1} ]
    then
       echo "b1不为空"
    else
       echo"b1为空"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    文件测试运算符
    #判断是目录
    file=./run
    if [ -d ${file} ]
    then 
       echo "false"
    else
       echo "不是目录"
    fi
    
    #判断是文件
    file=./run
    if [ -f ${file} ]
    then
      echo "是文件"
    else
      echo "false"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    判断文件是否存在
    if [ -e ${file} ]
    then
       echo "文件存在"
    else
       echo "false"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5. 函数

    function test(){
      a=$1
      b=$2
      echo "第一个参数为:"${a}
      echo "第二个参数为:"${b}
      c=`expr ${a} + ${b}`
      return ${c}
    }
    test 1 2 # 测试函数
    echo "调用函数的结果为:" $? #注意:调用时用$?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6. 打印

    echo "fdafd"
    echo "我的名字叫\"张三\"" # \"显示转义字符
    echo `ls` #显示命令执行结果
    echo "123" > test # 将123写入文件test中,不追加
    echo "456" >> test # 将456写入文件test中,追加
    echo `cat test`
    ls
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    7. 选择

    一般的if
    a=24
    if [ `expr a == 2` ]
    then
      echo "a==2"
    else
      echo "false"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    if嵌套
    if [ ${a} -gt 0 ]  #这里只做测试,忽略逻辑
    then
       echo "${a}>0"
       if [ ${a} -gt 6 ]
       then
          echo "${a} > 6"
       else
          echo "${a} <= 6"
       fi
    elif [ ${a} -gt 5 ]
    then   
       echo "${a}>5"
    elif [ ${a} -gt 10 ]
    then   
       echo "${a}>10"
    else
       echo "false2"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    8. 循环

    arr=(1 2 3 4 5)
    for i in ${arr[*]} # 注意这里的写法是arr[*]
    do
       echo "当前元素为:"${i}     
    done
    
    int=1
    while(( $int<=5 ))
    do
        echo $int
        let "int++" #Bash let 命令,它用于执行一个或多个表达式,变量计算中不需要加上 $ 来表示变量
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    深度学习每周学习总结N1(one-hot 编码案例)
    【相关概念】经济金融中的Momentum
    云计算存储虚拟化技术
    Java 版本任你发,我用Java8.(Java 15 新功能介绍 )
    汇编语言循环左移和循环右移如何实现的,详细的比喻一下
    SpringBoot集成swagger
    NoSQL数据库(林子雨慕课课程)
    腾讯云:腾讯自研业务上云,对于腾讯云意味着什么?
    filter与coalesce的配合使用_尚硅谷大数据培训
    什么是大数据可视化
  • 原文地址:https://blog.csdn.net/weixin_42096624/article/details/127661757