一.
条件测试操作
1.      
test
命令
  
用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0
,否则为其他数值
  
格式:test 
条件表达式
              [  
条件表达式   ]
常见的测试类型 : 
测试文件状态  
字符串比较 
整数值比较  
逻辑测试
1)      
测试文件状态
  
格式:[ 
操作符 
文件或目录 ]
c.
常用的测试操作符
  
-d
:测试是否为目录(Directory
  
-e
:测试目录或文件是否存在(Exist
  
-f
:测试是否为文件(File
  
-r
:测试当前用户是否有权限读取(Read
  
-w
:测试当前用户是否有权限写入(Write
  
-x
:测试当前用户是否可执行(Excute
)该文件
  
-L
:测试是否为符号连接(Link
)文件
  
eg:
换teacher
用户登录看是否对/etc/passwd
文件是否有读取、写入的权限,
如果是显示   [ -w/etc/passwd ] && echo “yes”
   [  -e /etc/sysconfig/  ] && echo "yes"
2)      
整数值比较
  
格式:[ 
整数1 
操作符 
整数2 ]
常用的测试操作符
  
-eq
:等于(Equal
  
-ne
:不等于(Not Equal
  
-gt
:大于(Greater Than
  
-lt
:小于(Lesser Than
  
-le
:小于或等于(Lesser or Equal
  
-ge
:大于或等于(Greater or Equal
   如果登录用户小于或者等于10则显示yes 
[ `who | wc -l` -le 10 ] && echo "YES"
3)      
字符串比较
  
格式:[ 
字符串1 = 
字符串2 ]
              [ 
字符串1 != 
字符串2 ]
              [  -z 
字符串 ]
            
常用的测试操作符
  
=
:字符串内容相同
  
!=
:字符串内容不同,!
号表示相反的意思
  
-z
:字符串内容为空
  
用touch
建立aa
,并判断aa
是否为空 [ -z `cat aa` && echo “yes” ]
4)      
逻辑测试
a)           
格式:[ 
表达式1 ] 
操作符 [ 
表达式2 ] ...
常用的测试操作符
  
-a
或&&
:逻辑与,“而且”的意思
p   前后两个表达式都成立时整个测试结果才为真,否则为假
  
-o
或||
:逻辑或,“或者”的意思
二.
if
条件语句
1.单分支:
如果/boot
分区的空间使用超过80%
,输出报警信息
#!/bin/bash
RATE=`df -hT | grep "/boot" | awk '{print $6}' | cut -d "%" -f1 `
if [ $RATE -gt 80 ]
then
    echo "Warning,DISK is full!"
fi
2.      
双分支
当“条件成立”、“条件不成立”时执行不同操作
       例子:
判断
sshd
是否在运行,若已运行则输出提示信息,否则重新启动sshd
服务
#!/bin/bash
service sshd status &> /dev/null
if [ $? -eq 0 ]
    then
        echo "mysqld service is running."
    else
        /etc/init.d/sshd restart
fi
3.      
多分支
三.
for
循环语句
根据变量的不同取值,重复执行一组命令操作
例子1
:依次输出3
条文字信息,包括一天中的“Morning”
、“Noon”
、“Evening”
字串
#!/bin/bash
for TM in "Morning" "Noon" "Evening"
do
    echo "The $TM of the day."
done
   
例子2
:对用使用/bin/bash
作为登录shell
的系统用户,检查他们在/opt
目录中拥有的子目录或文件的数量,如果超过100
个,则列出具体的数值及对应的账号
#!/bin/bash
DIR="/opt"            
设置检查的目标目录                
LMT=100              
设置文件数量的限制值
ValidUsers=`grep "/bin/bash" /etc/passwd | cut -d ":" -f 1` 
找出使用bash
的系统用户列表
for UserName in $ValidUsers
do
    Num=`find $DIR -user $UserName | wc -l`
统计每个用户拥有的文件数
    if [ $Num -gt $LMT ] ; then  
将文件数量与限制比较
         echo "$UserName have $Num files."
    fi
done
四.
while
循环语句
      
应用示例1
      
批量添加20
个系统用户帐号,
用户名依次为“stu1”
、“stu2”
、……
、“stu20”
#!/bin/bash
i=1
while [ $i -le 20 ]
do
    useradd stu$i
    echo "123456" | passwd --stdin stu$i &> /dev/null
    i=`expr $i + 1`
done
      
应用示例2
:删除刚建立的20
个帐户
#!/bin/bash
i=1
while [ $i -le 20 ]
do
    userdel -r stu$i
    i=`expr $i + 1`
done
五.
case
多重分支语句
根据变量的不同取值,分别执行不同的命令操作
#!/bin/bash
echo -n "please inset some keys:"
read AA
case $AA in 
[a-z]|[A-Z])
echo "they are letters"
;;
[0-9])
echo "they are number"
;;
*)
echo "they are other words"
;;
esac
六.
until
循环语句
until
语句根据条件执行重复操作,
与while
循环正好相反
七.
shift
迁移语句
用于迁移位置变量,将 $1~$9
依次向左传递
  
例如,若当前脚本程序获得的位置变量如下:
p  $1=file1、$2=file2、$3=file3、$4=file4
  
则执行一次shift
命令后,各位置变量为:
p  $1=file2、$2=file3、$3=file4
  
再次执行shift
命令后,各位置变量为:
p  $1=file3、$2=file4
#!/bin/bash
Result=0
while [ $# -gt 0 ]
do
    Result=`expr $Result + $1`
    shift
done
echo "The sum is : $Result"
八.
循环控制语句
1.      
break
语句
for
、while
、until
等循环语句中,用于跳出当前所在的循环体,执行循环体后的语句
2.      
continue
for
、while
、until
等循环语句中,用于跳过循环体内余下的语句,重新判断条件以便执行下一次循环
九.
Shell
函数应用
Shell
函数概述
  
在编写Shell
脚本程序时,将一些需要重复使用的命令操作,定义为公共使用的语句块,即可称为函数
  
合理使用Shell
函数,可以使脚本内容更加简洁,增强程序的易读性,提高执行效率
1.      
定义新的函数,两种方法:
   方法一:
 
function
函数名 {
  命令序列
}
方法二:
函数名() {
  命令序列
}
2.       例子
  
在脚本中定义一个加法函数,用于计算2
个整数的和
  
调用该函数计算(12+34
)、(56+78
)的和
 
#!/bin/bash
adder() {
    echo `expr $1 + $2`
}
adder 12 34
adder 56 789