《shell常用变量总结回顾》RHEL6
《shell常用变量总结回顾》RHEL6
这都是一年多以前学的,没想到今日还能再拿出来学一遍,顺便分享出来
1、shell的条件测试 test命令
用途:测试表达式是否成立,成立返回值为0,否返回值为其他值。
格式:test 条件表达式 [条件表达式]
≡ 常见的测试类型 测试文件的状态 字符的串比较 整数值比较 逻辑测试 测试文件的状态
格式:[操作符 文件或目录] 常见的测试操作符
-d :测试是否为目录【directory】
[root@localhost /]# [ -d /var/spool/ ]
[root@localhost /]# echo $?
0
-e:测测试目录或文件是否存在【exist】
[root@localhost /]# [ -e /etc/passwd ]
[root@localhost /]# echo $?
0
-f:测试是否为文件【file】
[root@localhost Packages]# [ -f /etc/passwd ]
[root@localhost Packages]# echo $?
0
[root@localhost Packages]#
-r:测试当前的用户是否有读取的权限 【read】
[root@localhost /]# [ -r /etc/shadow ]
[root@localhost /]# echo $?
0
[root@localhost /]#
-w:测试当前的用户是否有写的权限【write】
[root@localhost /]# [ -w /etc/shadow ]
[root@localhost /]# echo $?
0
[root@localhost /]#
-x:测试当前的用户是否可执行和该文件【excute】
[root@localhost /]# [ -x /etc/shadow ]
[root@localhost /]# echo $?
1
[root@localhost /]# ll /etc/shadow ----------. 1 root root 1086 2月 26 22:38 /etc/shadow
-L:测试是否为符号链接文件【link】
[root@localhost /]# ll /etc/shadow ----------. 1 root root 1086 2月 26 22:38 /etc/shadow
[root@localhost /]# [ -L /etc/shadow ]
[root@localhost /]# echo $?
1
另一种测试
[ -e /media/cdrom ] && echo "YES" 前面的执行对了才会执行后面的
[ -e /media/cdrom/Server ]&& echo “YES”
整数值比较 格式:[ 整数1 操作符 整数2 ]
常用的操作测试符 -eq:等于(Equal) -ne:不等于(Not Equal) -gt:大于(Greater Than) -lt:小于(Lesser Than) -le:小于或等于(Lessser or Equal) -ge:大于或等于(Greater or Equal)
如果登录用户数小于或等于10则输出YES
[root@localhost 桌面]# who|wc -l 2
[root@localhost 桌面]# [ `who|wc -l` -le 10 ] && echo "YES" YES
字符串比较 格式 [ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
[ -z 字符串 ]
常用的测试操作符
=:字符串内容相同 !=:字符串内容不相同,!号表示相反的意思 -z:字符内容为空
#read -p "input your name: " name root
#echo $name
#[ $name != "root"] && echo "name is erro"
##read -p "input your name: "
name zhangsan
#[ $name != "root"] && echo "name is erro"
#echo $name
逻辑测试
格式:[表达式1] 操作符 [表达式2]
常用的测试操作符 -a 或&&:逻辑与,“而且”的意思
#前后两个表达式都成立是整个测试结果才为真,否则为假 (前面真则执行后面)
-o或||:逻辑或,或者的意思
#操作符两边至少一个为真时,结果为真,否则结果为假
(前面假则执行后面) !:逻辑否 #当指定条件不成立时,返回结果为真
if条件语句 --单分支 当“条件成立“时执行相应的操作 if 条件测试命令
if 磁盘已用空间>80% then 命令序列 ==》 then 报警 fi fi
应用案例:
如果/boot分区的空间使用超过80%,输出报警信息
#!/bin/bash RATE=df |awk'NR==4{print int($5)}'
if [$RATE -gt 80] then echo "warning,DISK is full!"
fi
if条件语句--双分支 当“条件成立”、“条件不成立”时执行不同的操作
if 条件测试命令 if 3306端口是否在监听状态 then 命令序列1 ==》 then mysqld 服务已运行 else 命令序列2 else 启动mysqld服务 fi fi
引用案例: 判断vsftp是否在运行。若已运行则输出提示信息,否则重新启动vsftp服务 #!/bin/bash service vsftp status &>/dev/null if [ $? -eq 0 ] then echo "vsftp service is running" else /etc/init.d/vsftp restart fi
如果/boot分区的空间使用超过80%,输出警报信息。我们来写个脚本
#vi a.sh #!/bin/bash #a.sh NUM=`df | awk 'NR==5{print int($5)}'` if [ $NUM -gt 80 ] then echo "Warning,DISK is full!" if
awk的额外扩展
[root@localhost ~]# cat /etc/passwd | grep bash | awk -F: '{print ($1)}' root lenovo [root@localhost ~]# ^C
for循环语句
for 收件人 in 邮件地址列表 根据变量的不通值,重复执行一组命令操作 ==》 do for 变量名 in 取值列表 发邮件 do done 命令序列 done
#!/bin/bash for TM in a b c d e do echo $TM sleep 1 done ~ ~ ~ 重复测试指定的条件,只要条件成立则反复执行对应的命令操作
while 命令或表达式 while 可用内存<100mb do ==》do 命令列表 获取可用内存数 done done
多重分支语句
root@localhost ~]# cat a.sh
#!/bin/bash #a.sh case $1 in start)
echo "start...." ;; stop) echo "stop......" ;;
restart) echo "restart........" ;; laod) echo "laod......." ;; status)
echo "start....." echo "stop......" ;; esac
[root@localhost ~]# ./a.sh start start....
[root@localhost ~]# ./a.sh stop stop...... [root@localhost ~]#
[root@localhost ~]# cat a.sh #!/bin/bash
#a.sh read -p "input:" NUM case "$NUM" in [a-z]|[A-Z])
echo "it is english" ;; [0-9])
echo "it is shuzi" ;; *) echo "........." ;;
esac
[root@localhost ~]#
[root@localhost ~]# ./a.sh input:2 it is shuzi
[root@localhost ~]# ./a.sh input:a it is english [root@localhost ~]# ./a.sh @ input:@ ......... [root@localhost ~]# ./a.sh input:# ......... [root@localhost ~]#
shift迁移语句 用于迁移位置变量,将$1~$9依次向左传递
[root@localhost ~]# ./a.sh 10 20 The sum is: 30
[root@localhost ~]# cat a.sh #!/bin/bash
#a.sh Result=0 while [ $# -gt 0 ] do Result=`expr $Result + $1` shift done echo "The sum is: $Result"
[root@localhost ~]#
break语句
用于跳出当前的循环体,执行循环体后的语句。
函数的应用
[root@localhost ~]# ./c.sh 46 55
[root@localhost ~]# cat c.sh
#!/bin/bash #c.sh adder(){ echo `expr $1 + $2` }
adder 12 34 adder 22 33
[root@localhost ~]# ./c.sh 46 55
[root@localhost ~]#
评论暂时关闭