设为首页 收藏本站
查看: 840|回复: 0

第七章 shell学习之退出、测试、判断及操作

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-8-15 08:57:41 | 显示全部楼层 |阅读模式
退出状态
$?记录了上一个命令的退出状态:
0 运行成功
1~125 运行失败
126 找到命令但无法执行
127 未找到要运行的命令
>128 命令被系统强制结束
测试
两种方式:
test expression
[ expression ]
注意[]的两边必须要空格
比较条件为真返回0,假返回非0(C语言为真返回非0正整数,假返回0)
算数比较运算符
n1 -eq n2 等于返回0,不等于返回1
n1 -gt n2
n1 -ge n2
n1 -le n2
n1 -lt n2
n1 -ne n2 不等于返回0,等于返回1
例:
[iyunv@localhost tmp]# n1=15
[iyunv@localhost tmp]# [ "$n1" -eq 15 ]
[iyunv@localhost tmp]# echo $?
0
[iyunv@localhost tmp]# test "$n1" -eq 15
[iyunv@localhost tmp]# echo $?
0
[iyunv@localhost tmp]# [ $n1 -ne 15 ]
[iyunv@localhost tmp]# echo $?
1
[iyunv@localhost tmp]# test $n1 -ne 15
[iyunv@localhost tmp]# echo $?
1
注意:只能比较整数,不能比较浮点数
字符串运算符
方式1:(只能用test运算符)
-n string 测试字符串string是否不为空(不为空是真,值为0,为空值为1),-n为默认,可省略
-z string 测试字符串string是否为空(为空是真,值为0,不为空值为1)
方式2:
string1=string2 测试string1是否与string2相同
string1!=string2 测试string1是否与string2不同
例:
[iyunv@localhost tmp]# str1="hello"
[iyunv@localhost tmp]# test -n "$str1"
[iyunv@localhost tmp]# echo $?
0
[iyunv@localhost tmp]# test -z "$str1"
[iyunv@localhost tmp]# echo $?
1
[iyunv@localhost tmp]# [ "$str1"!=" " ]
[iyunv@localhost tmp]# echo $?
0
[iyunv@localhost tmp]# [ "$str1" -n " " ]    #方式1不能用于[]
bash: [: -n: binary operator expected
[iyunv@localhost tmp]# test "$str1"!=" "   #方式2通用
[iyunv@localhost tmp]# echo $?
0
文件操作符
test file_operator File
[ file_operator file ]
file_operator:
-d 是否为目录
-f 是否为普通文件
-e 是否存在
-r 是否可读
-w 是否可写
-x 是否可执行
-s 长度是否不为0
-L 是否符号化链接
如:
[ -d clc.txt ]
test -d clc.txt
echo $?
逻辑运算符
! 非
-a 与
-o 或
[ ! -e clc.txt ]   #clc.txt不存在为真(值为0)
[ -e clc.sh -a -x clc.sh ]  #clc.sh存在并且可执行则结果为真
判断
1.
if expression
then
...
fi
2.
if expression; then
...
fi
3.
if expression1
then
...
else
...
fi
4.
if expression1
then
...
elif expression2
then
...
else
...
fi
expression为表达式,如[ -e clc.sh -a -x clc.sh ]
case结构
case variable in
value1)
...;;
value2)
...;;
*)
...;;
esac
算术运算符
+;-;*;/;%;**(幂运算)
例:
let "z=8/5*5"
echo $z    #结果为5,因为8/5取整结果为5
位运算符
<< 左移
>> 右移
| 按位与
~ 按位非
^ 按位异或
例:
[iyunv@localhost tmp]# let "value=~8"
[iyunv@localhost tmp]# echo $value
-9
[iyunv@localhost tmp]# let "value=12|8"
[iyunv@localhost tmp]# echo $value
12
[iyunv@localhost tmp]# value=8
[iyunv@localhost tmp]# let "value<<=2"
[iyunv@localhost tmp]# echo $value
32
注:正数的补码=原码,负数的补码=反码+1。因为8为0000 1000,~8的原码为1111 0111,反码为1000 1000,补码为1000 1001,所以~a=-(a+1)
自增自减运算
[iyunv@localhost tmp]# num=5
[iyunv@localhost tmp]# let "a=5+(++num)"
[iyunv@localhost tmp]# echo $a
11
[iyunv@localhost tmp]# num1=5
[iyunv@localhost tmp]# let "a=5+(num1++)"
[iyunv@localhost tmp]# echo $a
10
[iyunv@localhost tmp]# num2=5
[iyunv@localhost tmp]# let "a=(num2++)+(++num2)"  #6+6
[iyunv@localhost tmp]# echo $a
12
[iyunv@localhost tmp]# echo $num2
7
[iyunv@localhost tmp]# num3=5
[iyunv@localhost tmp]# let "a=(num3++)+(++num3)+(++num3)"  #6+7+7
[iyunv@localhost tmp]# echo $a
20
[iyunv@localhost tmp]# num3=5
[iyunv@localhost tmp]# let "a=(num3++)+(++num3)+(++num3)+(++num3)"  #6+7+8+8
[iyunv@localhost tmp]# echo $a
29
[iyunv@localhost tmp]# num3=5
[iyunv@localhost tmp]# let "a=(num3++)+(++num3)+(++num3)+(++num3)+(++num3)" #6+7+8+9+9
[iyunv@localhost tmp]# echo $a
39
[iyunv@localhost tmp]# num3=5
[iyunv@localhost tmp]# let "a=(num3++)+(++num3)+(++num3)+(++num3)+(++num3)+(num3++)" #6+7+8+9+9+10
[iyunv@localhost tmp]# echo $a
49
[iyunv@localhost tmp]# num3=5
[iyunv@localhost tmp]# let "a=(num3++)+(++num3)+(++num3)+(++num3)+(++num3)+(num3++)+(num3++)"
[iyunv@localhost tmp]# echo $a
60
注:前置++为先自加后运算
数字常量
二进制:2#num
八进制:0num或8#num
十六进制:0xnum或16#num
例:
[iyunv@localhost tmp]# let "num=2#1000"
[iyunv@localhost tmp]# echo $num
8
[iyunv@localhost tmp]# let "num=8#10"
[iyunv@localhost tmp]# echo $num
8
[iyunv@localhost tmp]# let "num=010"
[iyunv@localhost tmp]# echo $num
8


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-23876-1-1.html 上篇帖子: 第六章 shell学习之变量和引用 下篇帖子: 第八章 shell学习之循环和结构化命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表