shell脚本应用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本应用相关的知识,希望对你有一定的参考价值。
Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0是表示成功,否则(非0值)表示失败或者异常。使用专门的测试工具-test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0时表示条件成立);
使用test测试命令时,包括以下两种形式。
test 条件表达式
或者
[ 条件表达式 ]
这两种方式的作用完全相同,但通常后一种形式更为常用,注意中括号括起来时至少要用一空格来分隔。
文件测试:
文件测试的常见选项如下:
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试当前用户是否有权限执行(EXcute)
执行条件测试后通过预定义变量“$?”可以获得测试命令的返回状态值。从而判断条件是否成立。
例:执行下列操作可测试目录/media/cdrom是否存在,如果返回值$?为0,表示存在此目录否则则不存在,或虽然存在但不是目录。
[[email protected] ~]# [ -d /media/cdrom ]
[[email protected] ~]# echo $? //查看当前一命令的返回值
1 //返回1表示条件不成立
[[email protected] ~]# [ -d /media ]
[[email protected] ~]# echo $? //查看当前一命令的返回值
0 //返回0表示条件成立
为了更直观的查看测试结果,可以结合命令输出符“&&”和echo命令一起使用,当条件成立时直接输出"yes",其中"&&"表示"而且"的关系,只有当前面的命令成功执行后才会执行后面的命令,否则后面的命令将会被忽略。例:上面的测试结果可以改为:
[[email protected] ~]# [ -d /media/cdrom ] && echo "yes" //无输出表示该目录不存在
[[email protected] ~]# [ -d /media ] && echo "yes" //输出"yes"表示该目录存在
yes
2.整数值得对比:整数值得比较指的是给定的两个整数值,判断第一个数与第二个数的关系,比如是否大于等于小于第二个数,整数值比较的常用选项如下。
-eq:第一个数等于第二个数
-ne:第一个数不等于第二个数
-gt:第一个数大于第二个数
-lt:第一个数小于第二个数
-le:第一个数小于或等于第二个数
-ge:第一个数大于等于第二个数
例:当判断已经登陆的用户,当小于五个时输出"Too many",可以执行以下操作。
[[email protected] ~]# Unum=`who |wc -l`
[[email protected] ~]# [ $Unum -lt 5 ] && echo "Too many"
Too many
再举个例子,当内存大于1024MB时输出以下值:
[[email protected] ~]# FreeCC=$(free -m | grep "cache:" | awk ‘{print $ 4}‘)
[[email protected] ~]# [ $FreeCC -gt 1024 ] && echo ${FreeCC}MB
1648MB
4.字符串比较:字符串比较通常用于检查用户的输入,系统环境等是否满足条件;
=:第一个字符串与第二个字符串相同;
!=:第一个字符串与第二个字符串不同,其中!表示取反;
-z:检查字符串是否为空值;
例:判断当前的语言环境是否为zh.CN;
[[email protected] ~]# echo $LANG
en_US.UTF-8
[[email protected] ~]# [ $LANG != "zh_CN" ] && echo "not zh.CN"
not zh.CN
再例如,在Shell脚本应用中,经常输入yes或者no来确认某个任务,以下操作展示了确认交互的简单过程:
[[email protected] ~]# read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?yes
[[email protected] ~]# [ $ACK = "yes" ] && echo “覆盖”
“覆盖”
[[email protected] ~]# read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?no
[[email protected] ~]# [ $ACK = "no" ] && echo 不覆盖
不覆盖
4.逻辑测试:指的是判断两个或多个条件之间的依赖关系,当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者其中一个成立等情况,需要一个测试的过程,常用的逻辑测试操作如下;
&&:逻辑与,表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值才为0(结果成立);
||:逻辑或,表示“或者”,只要当指定的条件不成立时,整个测试的返回值才为0(结果成立),使用test命令测试时,||可改为"-o";
!:逻辑否,表示“不”,只有当条件不成立时,整个测试命令的返回值为0(但结果是成立的);
例:若要判断当前Linux系统内核版本是否大于2.4,可执行以下操作;
[[email protected] ~]# uname -r
2.6.32-431.el6.x86_64
[[email protected] ~]# Mnum=$(uname -r| awk -F. ‘{print $1}‘)
[[email protected] ~]# Snum=$(uname -r| awk -F. ‘{print $2}‘)
[[email protected] ~]# [ $Mnum -eq 2 ] && [ $Snum -gt 4 ] && echo "符合要求"
符合要求
下次写点if语句,我这都是基础的,慢慢写点难度大的,我就是个渣渣,哈哈
本文出自 “一只菜的不能再菜的小菜鸟” 博客,请务必保留此出处http://liliming.blog.51cto.com/10925034/1792977
以上是关于shell脚本应用的主要内容,如果未能解决你的问题,请参考以下文章