Shell 学习笔记 0x05
1. 分支的另一种形式
Shell 也有和 C 系列语言相似的 &&, || 等符号,可以用来实现更复杂的功能:
1 | [ -d temp ] || mkdir temp # 如果 temp 目录不存在则创建 |
2. 读取标准输入
1 | read -ep 'input: ' foo |
运行:
1 | ./test.sh |
一些有用的选项:
| 选项 | 作用 |
|---|---|
-a array | 把输入放进数组 array 里,索引从零开始 |
-d delimiter | 把 delimiter 的第一个字符作为输入结束的指示,否则默认为换行符 |
-e | 使用 readline 处理输入,使行为与命令行相同 |
-n num | 读取 num 个字符,而不是等待完整的一行 |
-p prompt | 设置提示信息 |
-r | Raw mode ,不把 \ 当作转义字符 |
-s | Silent mode ,模拟密码输入,不现实用户的输入 |
-t seconds | 等待输入超过 seconds 则超时退出,返回非零值 |
-u fd | 从文件描述符 fd 读取输入 |
3. while
Shell 的 while 语法是:
1 | while commands; do |
比如打印五次 “bye world” :
1 | while (( i < 5 )); do |
当然也有 continue/break 来进行更复杂的控制:
1 | while (( i < 5 )); do |
输出:
1 | 1 |
4. until
Shell 还有 until 关键字,语法为:
1 | until commands; do |
行为是直到 until 后面的 commands 返回值为 0 ,反复执行 do 后面的 commands ,比如:
1 | until (( i == 5 )); do |
也会输出五次 “bye world”
5. 为循环进行 I/O 重定向
比如用 < 放在 done 后面:
1 | while commands; do |
或者 | 放在开头:
1 | cat file | while commands; do |
6. case
Shell 当然也有类似 switch 的语法( pattern 支持通配符):
1 | case word in |
比如:
1 | read choice |
C 系列语言的
switch的每个case最后都要写break,否则会继续运行下一个case,在 Shell 中;;会自动离开 case 块
Shell 的 case 还有一个更独特的特性,用 ;;& 结尾会进行多次匹配,比如:
1 | choice=114514 |
会输出两次 ok