`

Shell数值比较

 
阅读更多

1.  关于档案与目录的侦测逻辑卷标!
-f  常用!侦测『档案』是否存在 eg: if [ -f filename ]
-d  常用!侦测『目录』是否存在
-b  侦测是否为一个『 block 档案』
-c  侦测是否为一个『 character 档案』
-S  侦测是否为一个『 socket 标签档案』
-L  侦测是否为一个『 symbolic link 的档案』
-e  侦测『某个东西』是否存在!


2.  关于程序的逻辑卷标!
-G  侦测是否由 GID 所执行的程序所拥有
-O  侦测是否由 UID 所执行的程序所拥有
-p  侦测是否为程序间传送信息的 name pipe 或是 FIFO (老实说,这个不太懂!)


 

3.  关于档案的属性侦测!
-r  侦测是否为可读的属性
-w  侦测是否为可以写入的属性
-x  侦测是否为可执行的属性
-s  侦测是否为『非空白档案』
-u  侦测是否具有『 SUID 』的属性
-g  侦测是否具有『 SGID 』的属性
-k  侦测是否具有『 sticky bit 』的属性


 

4.  两个档案之间的判断与比较;例如[ test file1 -nt file2 ]
-nt 第一个档案比第二个档案新
-ot 第一个档案比第二个档案旧
-ef 第一个档案与第二个档案为同一个档案( link 之类的档案)


 

5.  逻辑的『和(and)』『或(or)』
&&  逻辑的 AND 的意思
||  逻辑的 OR 的意思

运算符号    代表意义
=   等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
!=  不等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串
<    小于 应用于:整型比较 在[] 中,不能使用 表示字符串 >   大于应用于:整型比较 在[] 中,不能使用 表示字符串
-eq 等于 应用于:整型比较
-ne 不等于 应用于:整型比较
-lt 小于 应用于:整型比较
-gt 大于 应用于:整型比较
-le 小于或等于 应用于:整型比较
-ge 大于或等于 应用于:整型比较
-a  双方都成立(and) 逻辑表达式 –a 逻辑表达式
-o  单方成立(or) 逻辑表达式 –o 逻辑表达式
-z  空字符串
-n  非空字符串

 


所以你的循环条件部分写成这样才是对的:
while [ "${conunter}" -lt 5 ]; do
注意在条件检测中把变量名引起来的双引号不能省略,这个地方如果将来是字符串的判定,没有双引号在某些条件下会被玩死的。所以最好养成习惯,无论是不是数值都把变量名用双引号引起来。另外,做累加操作还有别的方法,像下面这样:
#!/bin/ksh
counter=0
while [ "${counter}" -lt 5 ]; do
((counter++))
echo "counter is $counter"

done

 

 

for i in $(seq 0 99); do [ $i lt 10 ] && useradd student0$i || useradd student$i; done

 

 

 

 

shell中的特殊变量:
变量名
含义

$0
shell或shell脚本的名字

$*
以一对双引号给出参数列表

$@
将各个参数分别加双引号返回

$#
参数的个数

$_
代表上一个命令的最后一个参数

$$
代表所在命令的PID

$!
代表最后执行的后台命令的PID

$?
代表上一个命令执行后的退出状态


e.g.

编辑如下test.sh脚本

#!/bin/bash

echo $0

echo $*

echo $@

echo $#

echo $$

ls -a /home

echo $_

在terminal窗口中执行:

xk@linux:~/work> ./test.sh -a -b -c /home

./test.sh

-a -b -c /home

-a -b -c /home

4

3250

. .. fy jodier sky xk zhj

/home

xk@linux:~/work>echo $?

0

xk@linux:~/work>echo $!



xk@linux:~/work> ls -a /home &

[1] 3302

xk@linux:~/work> . .. fy jodier sky xk zhj



[1]+ Done /bin/ls $LS_OPTIONS -a /home

xk@linux:~/work> echo $!

3302

xk@linux:~/work>

为了区别$*和$@编写如下test.sh脚本:

#!/bin/bash

function testargs

{

echo "$# args"

}

testargs "$*"

testargs "$@"

unset -f testargs

在terminal窗口中执行:

xk@linux:~/work> ./test.sh -a -b /home

1 args

3 args

xk@linux:~/work>

这里有一个很有意思的问题,如果test.sh为如下的内容:

#!/bin/bash

function testargs

{

echo "$# args"

}

testargs $*

testargs $@

unset -f testargs

再次执行有:

xk@linux:~/work> ./test.sh -a -b /home

3 args

3 args

xk@linux:~/work>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics