Bash shell

Bash 脚本结构化

  1if-then语句
  2         ○ bash将会运行if后面的命令,如果该命令运行结束的退出码是0(运行成功),执行then部分的命令
  3         ○ fi语句表示if语句到此结束
  4         ○ 在then后面可以使用多条命令(命令块),需要缩进
  5if-then-else语句
  6             § 当if后命令返回的退出码为0,执行then后命令,不为0,执行else部分命令
  7             § else也可以包含多条命令
  8     • 嵌套if
  9         ○ 可以使用elif语句代替嵌套的if-then语句让命令更清晰
 10         ○ 在elif语句中,紧跟其后的else语句术语elif代码块,它们不属于之前的if-then代码块
 11     • test命令
 12         ○ 数值,字符串,文件比较
 13         ○ 数值比较
 14             n1 -eq n2     检查 n1 是否与 n2 相等
 15             n1 -ge n2     检查 n1 是否大于或等于 n2
 16             n1 -gt n2     检查 n1 是否大于 n2
 17             n1 -le n2     检查 n1 是否小于或等于 n2
 18             n1 -lt n2     检查 n1 是否小于 n2
 19             n1 -ne n2     检查 n1 是否不等于 n2
 20             § 不能比较浮点数
 21         ○ 字符串比较
 22             str1 = str2     检查 str1 是否和 str2 相同
 23             str1 != str2    检查 str1 是否和 str2 不同
 24             str1 < str2     检查 str1 是否比 str2 小
 25             str1 > str2     检查 str1 是否比 str2 大
 26             -n str1 检查     str1 的长度是否非0
 27             -z str1 检查     str1 的长度是否为0
 28             § 字符串相等性
 29                 □ 测试大于或小于时,在大于号&&小于号前加上反斜杠,否则会被bash当成重定向符
 30                 □ 在比较测试中,大写字母被认为小于小写字母
 31                 □ -n判断字符串长度非0,-z判断字符串长度为0
 32         ○ 文件比较
 33             -d file     检查 file 是否存在并是一个目录
 34             -e file     检查 file 是否存在
 35             -f file     检查 file 是否存在并是一个文件
 36             -r file     检查 file 是否存在并可读
 37             -s file     检查 file 是否存在并非空
 38             -w file     检查 file 是否存在并可写
 39             -x file     检查 file 是否存在并可执行
 40             -O file     检查 file 是否存在并属当前用户所有
 41             -G file     检查 file 是否存在并且默认组与当前用户相同
 42             file1 -nt file2     检查 file1 是否比 file2 新
 43             file1 -ot file2     检查 file1 是否比 file2 旧
 44     • 复合条件测试
 45         ○ &&和||
 46if-then高级特性
 47         ○ 双括号命令
 48             § ((expression))    #expression可以是任意的标准数学运算符或标准表达式
 49             val++     后增
 50             val--     后减
 51             ++val     先增
 52             --val     先减
 53             !         逻辑求反
 54             ~         位求反
 55             **        幂运算
 56             <<        左位移
 57             >>        右位移
 58             &         位布尔和
 59             |         位布尔或
 60             &&        逻辑和
 61             ||        逻辑或
 62             § 注意,双括号中的数学运算符不需要转义
 63         ○ 双方括号
 64             § [[expression]]   #模式匹配
 65             § 匹配模式支持正则表达式
 66     • case语句
 67         ○ 代替多个if-then嵌套
 68         ○ case命令采用列表格式检查一个变量的多个值
 69         ○ *号会捕获所有与已知模式不匹配的值
 70     • for命令,列表迭代,类似Python的for循环
 71         for var in list
 72         do
 73             commmands(多条命令)
 74         done
 75         ○ 除非手动修改,var会保持最后一次迭代的值,直到脚本结束
 76     • 从命令读取值
 77         ○ 使用命令的输出作为变量
 78         ○ 将文件的路径,名称赋值给变量
 79     • 更改字符段分分隔符
 80         ○ 默认分隔符 空行,制表符,换行符
 81         ○ 临时改变环境变量IFS的值
 82         ○ 指定多个分隔符,只需要在给IFS赋值时将各个分隔符串起来
 83     • 用通配符读取目录
 84         ○ 强制使用文件匹配扩展
 85         ○ Linux中文件名中含有空格是合法的,要适应这种情况,应该将$file用双引号圈起来
 86     • C风格的for循环
 87         ○ 双括号避免和bash shell的语法发生冲突
 88         ○ 括号中的变量不用使用美元符,变量运算不需要进入expr,变量赋值可以有空格
 89         ○ 和C语言类似,在for循环中可以使用多个变量
 90     • while循环
 91         while test command
 92         do
 93             other commands
 94         done
 95         若test command的退出码为0
 96         执行commands
 97         ○ 方括号检查shell变量
 98         ○ 使用多个测试命令时,只有最后一个命令的退出码会被用来决定什么时候退出循环
 99     • until命令
100         ○ until与while相反,当返回一个不为0的退出码时,执行commands
101         ○ 当返回的退出码为0时,循环结束
102         until test command
103         do
104             other commands
105         done
106         ○ 使用多个测试命令时规则和while相同
107     • 嵌套循环
108         ○ 可以混用不同的循环方式(forwhileuntil109     • 循环处理文件数据
110         ○ ??????????
111     • 循环控制
112         ○ break
113         ○ continue
114     • 处理循环的输出
115done > output.txt   #将for命令的结果重定向到output.txt
116         ○ 重定向文件不存在则shell会创建一个该文件
原文地址:https://www.cnblogs.com/CofJus/p/10174664.html