shell脚本学习之语法

3 篇文章 0 订阅
一、条件测试
1、条件测试:test或[
     命令test可以测试一个条件是否成立,若测试结果为真,则退出码为0,若测试结果为假,则为1
  • 字符串比较时:
    • 用==或=或 !=(建议用==)表示比较两字符相同或不相同
    • [ -z string ] 若string的长度为0则为真
    • [ -n string ] 若string的长度不为0则为真
*在比较两个字符串是否相等时,建议加上双引号,且在表达式两边均加上相同的一个字母:test "X$data" == "Xhello"
*注意命令和变量的空格,重要重要重要!命令后面加空格,变量不能加空格
  • 整形的比较:
    • -eq表示相等
    • -ne表示不相等
    • -gt表示大于
    • -lt表示小于 
    • -le表示小于等于

    • -ge表示大于等于


    • 目录或文件的比较
      • [ -d dir ] 若dir存在且为一个目录,则为真
      • [ -f file ] 或file存在且为一个普通文件则为真
    • 与或非运算
      • [ ! exp ]  ! 表示取反
      • [ exp1 -a exp2 ]  -a表示逻辑与(and)
      • [ exp1 -o exp2 ] -o 表示逻辑或(or)


  • 二、语句
    1、if/then/elif/else/fi
    注意:     
    • if、then、fi是三条命令,若两条命令写一行要用; 隔开,此外,命令和参数之间必须用空格隔开,then后面有换行。
    • if后面跟一条子命令,若该子命令的退出码为0(表示真),则执行then后面的子命令,若退出码为假,则执行elif、else、fi后面的命令。if后的子命令常是测试命令。
    • fi表示if语句块的结束。
    • 命令后不能有空语句,若必须写空语句,则用 : 代替,冒号是一个空命令,不做任何事,但是退出状态为真

  •    read命令表示等待用户输入字符串,将这个字符串保存到shell变量中。
        同时,&&和||也可以表达条件
      • &&表示“if...then...”
      • || 表示"if not ....then"
      • &&和||均用于连接两个命令,上面的-a和-o仅用于连接两个测试条件

  • 2.case语句
         shell脚本中的case语句可以匹配字符串和wildcard,每个匹配分支有若干条命令,末尾以;;结束,结束后直接跳出esac。

  • $1表示特殊变量,是在执行脚本时自动取值为第一个命令行参数

    3、循环语句
    • 1、for/do/done

  • 注意:do done之间不能不写语句,若没有语句,则加冒号
    • 2、while/do/done
              例1:

  • 例2

  • shell还有until循环,相当于do..while循环

  • 三、位置参数与特殊变量
    • $0 相当于c语言main函数的argv[0]
    • $1,$2.. 相当于main函数的argv[1]、argv[2]....
    • $# 相当于argc -1
    • $@ 表示参数列表“$1”“$2”...
    • $? 上一条命令的退出状态
    • $$当前shell的进程号
    *注意在shell脚本的$$的进程号是子bash的进程号,若在执行脚本之前加上 . 或者source,则不派生子bash,$$表示当前shell进程号

    • shift 命令左移:例如shift 3表示原来的$4变成$1,原来的$5变成$2... 原来的$1、$2、$3丢弃,$0不移动

     四、函数
    • shell中的函数没返回值也没有参数列表
    • shell在函数调用时不写括号
    • 函数必须先定义在调用
    • 传递参数时,在调用函数的同时传任意多个参数,函数内用$0 $1等来提取参数,这些函数中的参数相当于局部参数。不会影响函数外面的变量
    • 函数可以用return返回退出状态

  • 2、调试函数
    • 解释器后加-n 表示读一遍脚本命令但不执行,用于检查脚本是否有语法错误
    • 解释器后加-x 提供跟踪执行信息,在执行每一条命令和结果打印出来
    • 在代码中要调试某部分时,将这部分前后加set -x和set +x

    四、数组
         bash支持一维数组(不支持多维),并且没有限定的大小,从0开始数据之间用空格隔开

    初始化:
    arr=('a' 'b' 'c')  #数组元素为abc,三个元素
    echo ${arr[0]}     #一定要加花括号
    :进度条小脚本

    • 例二:读文件内容,文件每一行放一个数,计算这个文件的最大数、最小数、平均数以及总数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值