Bash shell - 2
Bash 脚本结构化
1 • if-then语句 2 ○ bash将会运行if后面的命令,如果该命令运行结束的退出码是0(运行成功),执行then部分的命令 3 ○ fi语句表示if语句到此结束 4 ○ 在then后面可以使用多条命令(命令块),需要缩进 5 ○ if-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 ○ &&和|| 46 • if-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 ○ 可以混用不同的循环方式(for,while,until) 109 • 循环处理文件数据 110 ○ ?????????? 111 • 循环控制 112 ○ break 113 ○ continue 114 • 处理循环的输出 115 ○ done > output.txt #将for命令的结果重定向到output.txt 116 ○ 重定向文件不存在则shell会创建一个该文件