状态码 | 描述 |
0 | 命令成功结束 |
1 | 通用未知错误 |
2 | 误用Shell命令 |
126 | 命令不可执行 |
127 | 没找到命令 |
128 | 无效退出参数 |
128+x | Linux信号x的严重错误 |
130 | 命令通过Ctrl+C控制码越界 |
255 | 退出码越界 |
状态码访问:
$echo $?
Shell符号规则,现总结备忘如下:
1.方括号[]
一般来说常用于test命令
example:
[ $arg1 = $arg2 ] :检查两个参数是否相等。
[ -d $HOME ] --检查$HOME代指是否为目录文件,若是则返回状态码0,这种情况下才判断成功
其实质相当于test -d $HOME,我们可以用
$echo $? 检测状态码
2.双圆括号(( expression ))
作用:双圆括号允许你将高级数学表达式放入比较中
下面是双圆括号所支持的命令符号:
符号 | 描述 |
val++ | 后增 |
val-- | 后减 |
++val | 先加 |
--val | 先减 |
! | 逻辑求反 |
~ | 位求反 |
** | 幂运算 |
<< | 左位移 |
>> | 右位移 |
& | 位布尔和 |
| | 位布尔或 |
&& | 逻辑和 |
|| | 逻辑或 |
3.双方括号 [[ expression ]]
作用:提供了针对字符串比较高级特性,除了可以像方括号使用test命令那样之外,还可以进行模式匹配。
4.$[ operation ]
作用:执行数学表达式
example:
var3=$[ $var1 / $var2 ]
5.命令行参数
5.1如何简单接受命令行参数
$0 : 程序名
$1-$9:字符串或者数值参数。
${10}10个参数以上表达方式
参数计数:$#,这个变量跟C语言中的argc是一样的作用,只不过没有显示的表示而已。
5.2 如何遍历参数 :$*和$@的区别
区分codes(来自Linux 命令行与shell脚本编程大全):
res:
5.3 如何处理选项与参数
codes:
1 #!/bin/bash 2 while [ -n "$1" ] 3 do 4 5 case "$1" in 6 7 -a) echo "Found the -a option" ;; 8 9 -b) echo "Found the -a option" ;; 10 11 -c) echo "Found the -a option" ;; 12 13 --) shift break ;; 14 15 esac 16 17 shift 18 19 done 20 21 count=1 22 23 for param in $@ 24 25 do 26 27 echo "Parameter #$count: $param" 28 29 count=$[ $count +1 ] 30 31 done
6、Shell的输入与输出
这里只说明几种特殊的情况:
a.只重定向错误输出:
方法:将对应的文件描述符写在重定向符号前面。
b.临时重定向
方法:在文件描述符前加and(&)
$echo "This is an error message" >&2
c.永久重定向
方法:用exec来告诉shell在脚本运行期间重定向某个文件描述符。
$exec 1>testout