Shell 参数等等

简介:

$# 传送给命令Shell的参数序号 
$- 在Shell启动或使用set命令时提供选项 
$? 上一条命令执行后返回的值 
$$ 当前shell的进程号 
$! 上一个子进程的进程号 
$@ 所有的参数,每个都用双括号括起 
$* 所有参数,用双括号括起 
$n 位置参数值,n表示位置 
$0 当前shell名

 

1.测试文件状态
test一般有两种格式,即:
test condition

[ condition ]
使用方括号时,要注意在条件两边加上空格。
一般采用第2种方式,比较方便。
测试文件状态的条件表达式很多,下面是一个常用的文件状态列表。
文件状态测试
-a 文件存在
-b 文件存在并且是块文件
-c 文件存在并且是字符文件
-d 文件存在并且是目录
-s 文件长度大于0、非空
-f 文件存在并且是正规文件
-w 文件存在并且可写
-L 文件存在并且符号连接
-u 文件有suid位设置
-r 文件存在并且可读
-x 文件存在并且可执行
file1 -nt file2 file1的修改时间比file2的修改时间晚,或者是 file1存在,file2不存在
file1 -ot file2 file1的修改时间比file2的修改时间早,或者是 file2存在,file1不存在

注意:0表示成功,其他为失败。
例:
[test@test ~]$ ll test.txt
-rw-rw-r-- 1 test test 3 2008-08-22 16:30 test.txt
[test@test ~]$ [ -f test.txt ]
[test@test ~]$ echo $?
0
[test@test ~]$ [ -d test.txt ]
[test@test ~]$ echo $?
1

2.逻辑操作符
测试文件状态是否为OK,但是有时要比较两个文件状态。shell提供三种逻辑操作完成此
功能。
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑非,条件为假,结果为真。

例:
[test@test ~]$ ll test.txt
-rw-rw-r-- 1 test test 3 2008-08-22 16:30 test.txt
[test@test ~]$ [ -f test.txt -a -s test.txt ]
[test@test ~]$ echo $?
0

test.txt是一个普通文件,并且内容不为空,测试成功

[test@test ~]$ [ -f test.txt -a -x test.txt ]
[test@test ~]$ echo $?
1

test.txt不可执行,所以为假

3. 字符串测试
字符串测试是错误捕获很重要的一部分,特别在测试用户输入或比较变量时尤为重要。
字符串测试有5种格式

test "string"
test string_operator "string"
test "string" string_operator "string"
[ string_operator string ]
[ string string_operator string ]

这里,string_operator可为:
= 两个字符串相等。
!= 两个字符串不等。
-z 空串。
-n 非空串。
要测试环境变量EDITOR是否为空:
$ [ -z $EDITOR ]
$ echo $?
1
非空,取值是否是vi?
$ [ $EDITOR = "vi" ]
$ echo $?
1
用echo命令反馈其值:
$ echo $EDITOR
vi

测试变量var1与变量var2是否相等:

$ [ "$var1" = "$var2" ]

没有规定在设置变量时一定要用双引号,但在进行字符串比较时必须这样做,否则可能会出错,比如
var1=""
var="test"
此时,[ $var1 = $var2 ]语句会解析成:
[ = test ] 因此会出现语法错误,输出错误提示:
bash: [: =: unary operator expected

4. 测试数值
测试数值可以使用许多操作符,一般格式如下:
"number" numeric_operator "number"
或者
[ "number" numeric_operator" number" ]
numeric_operator可为:
-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。

例:
$ value=15
$ [ $value -eq 15 ]
$ echo $?
0
$ [ $value -eq 16 ]
$ echo $?
1

5. 数值测试
可以用expr测试一个数,expr命令一般用于整数值,但也可用于字符串。一般格式为:
expr argument operator argument
例如:
要测试一个变量是否是一个整数值,可以这样测试:
$ val=15
$ expr $val + 1 > /dev/null 2>&1
$ echo $?
0
如果返回值为0,证明这是一个数,其他则表明为非数值。
$ val=test
$ expr $val + 1 > /dev/null 2>&1
$ echo $?
2
这是一个非数值变量。
expr也可以返回其本身的退出状态,不幸的是返回值与系统最后退出命令刚好相反,成功返回1,任何其他值为无效或错误。下面的例子测试两个字符串是否相等,这里字符串为
“hello”和“hello”。
$ val=hello
$ expr $val = "hello"
1
$ echo $?
0
expr返回1。不要混淆了,这表明成功。现在检验其最后退出状态,返回0表示测试成功,“hello”确实等于“hello”。



本文转自 nonono11 51CTO博客,原文链接:http://blog.51cto.com/abian/1119757,如需转载请自行联系原作者

相关文章
|
机器学习/深度学习 Shell
Shell 传递参数
Shell 传递参数
122 0
|
SQL 分布式计算 Hadoop
55 Hive Shell参数
55 Hive Shell参数
143 0
|
存储 缓存 Linux
【Shell 命令集合 磁盘维护 】Linux 设置和查看硬盘驱动器参数 hdparm命令使用教程
【Shell 命令集合 磁盘维护 】Linux 设置和查看硬盘驱动器参数 hdparm命令使用教程
557 0
|
8月前
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
186 18
|
Shell
[shell]在curl测试的data参数中引用变量
[shell]在curl测试的data参数中引用变量
586 1
|
存储 弹性计算 运维
调整虚拟机内存参数的 shell 脚本
【4月更文挑战第29天】
185 2
|
存储 弹性计算 运维
调整虚拟机内存参数的shell 脚本
【4月更文挑战第29天】
164 0
|
存储 Shell
Shell变量和参数
Shell变量和参数
149 3
|
编解码 Linux Shell
【Shell 命令集合 系统设置 】Linux 设置Linux系统的控制台参数和属性setconsole命令 使用指南
【Shell 命令集合 系统设置 】Linux 设置Linux系统的控制台参数和属性setconsole命令 使用指南
318 0
|
存储 Shell Linux
【Shell 命令集合 系统设置 】Linux 将参数作为命令行输入 eval命令 使用指南
【Shell 命令集合 系统设置 】Linux 将参数作为命令行输入 eval命令 使用指南
332 0