《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 ~]#

相关内容