Chinaunix首页 | 论坛 | 博客
  • 博客访问: 298261
  • 博文数量: 58
  • 博客积分: 2763
  • 博客等级: 少校
  • 技术积分: 731
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-04 19:07
文章分类

全部博文(58)

文章存档

2011年(55)

2009年(1)

2008年(2)

分类: LINUX

2011-07-26 22:03:56

我们写脚本时,要用到条件判断,选择,循环等,下面我来一一作介绍。
1.条件判断
   主要有三种:1)test 表达式
               2)[ 表达式 ] 表达式两边必须有空格
               3)[[ 表达式 ]]
我们经常用到的条件测试有以下几种:
   文件测试:-e      FILE是否存在
             -f       是否是普通文件
             -d       是否是目录
             -h/-L    是否是符号链接文件
             -r       对当前用户是否可读
             -w       对当前用户是否可写
             -x       对当先用户是否可执行
             -s       是否存在,并且不为空
             -O       判断文件的发起者是不是该文件的属主
             -G       判断文件的发起者是不是该文件的
属组
   整数测试:
         双目运算符:
           -lt小于 ,[ $A -lt $B ]
           -le小于或等于,
           -gt大于
           -ge大于或等于
           -eq等于
           -ne不等于
       例如接收两个参数,比较大小,并且显示出来:
 [ $1 -ge $2] && echo "$1 is the max number" || echo "$2 is the max number"
 
   字符串测试:
          ==      等于
          >       大于
          <       小于
          !=,<>  不等于
          -z      判断一个字符是否为空,为空则为真
          -n      判断一个字符是否为空,不为空则为真
组合条件:
  -a      判断的条件同时具备 例如:[ -x $FILE -a -w $FILE ]
  -o      任何一个条件成立,or的意思。
  -not,!  反向状态,例如test -x file,当file没有x权限时,返回真。
例如:写一个脚本:
    判断一个文件是否存在,如果存在就显示存在。
     #!/bin/bash
       [ -e $1] && echo "$1 has exsit." || echo "$1 does not exsit."
2.条件判断
格式:单分支
         if [ 表达式 ];then
           statement
             ....
         fi
      双分支
         if [ 表达式 ];then
          statement
           ....
         else
          statement
           ....
         fi
      多分支
         if [ 表达式 ];then
           statement
            ....
         elif [ 表达式 ];then
           statement
            ....
         elif [ 表达式 ];then
           statement
            ....
         else
           statement
            ....
         fi   
 
例如:1)让用户通过命令行传递一个路径,判断其是否存在,如果存在,判断是什么文件类型。
      (1)如果是普通文件,显示之
      (2)否则,如果是目录,显示之
      (3)否则,如果是链接,显示之
      (4)否则,显示无法识别
     2)如果不存在,显示不存在。
#!/bin/bash
if [ -e $1 ];then
     echo -e "$1 exists,then what the filestyle:"
   if [ -L $1 ];then
     echo -e "$1 is a link-file"
      elif [ -d $1 ];then
         echo -e "$1 is a directory"
      elif [ -f $1 ];then
         echo -e "$1 is a ordinary-file"
      else
         echo -e "unknow"
   fi
else
    echo -e "$1 does not exsit."
fi
 
3.循环
1)for 循环
   格式:  for 变量 in 列表;
             statement
             ......
           done
  
例如:计算100以内所有偶数的和
   #!/bin/bash
     let SUM=0
     for I in `seq 1 100`;do
         if [ $[$I%2] -eq 0 ];then      #表示100以内能被2整除的数
           SUM=$[$SUM $I]
         fi
     done
     echo "$SUM
for之前我们已经谈过了,这里就不再多说了。
 
2)  while循环
  格式:
     while [ 表达式 ];do
        statement
           ....
      done
  只要满足条件就进行循环,下面我们来举一个例子。
例如:计算1加到100的和
#!/bin/bash
let I=1
let SUM=0
while [ $I -le 100 ];do
    let SUM=$I
    let I++
done
echo "$SUM"
 
我之前介绍过佛如可以实现一次读一行,那while是否也能够一次读一行呢?当然是可以的。
用for实现一次读一行
IFS=$'\n'
for I in `cat /etc/inittab`;do
用while实现一次读一行
while read LINE;do
...
...
done < /etc/inittab
 
例如:读取/etc/passwd,显示出用户名和SHELL,形如:root,SHELL:/bin/bash
 
#!/bin/bash
while read LINE;do
  USERNAME=`echo $LINE|cut -d ":" -f1`
  USERSHELL=`echo $LINE|cut -d ":" -f7`
echo "$USERNAME,SHELL:$USERSHELL"
done < /etc/passwd
 
3)until循环
until [ 表达式 ];do
 ...
 ...
done
只有当条件满足时,才会退出程序。否则,会一直循环下去。
 
写一个脚本:
1.查看redhat用户是否登录了系统,如果登录了,就通知当前脚本执行者“redhat is logged on.”;
2.否则,就睡眠5秒钟后再次进行测试;直到其登录为止退出;
要求:使用until循环
 
#!/bin/bash
until who |grep "^redhat" &> /dev/null;do
  sleep 5
done
echo "redhat is logged on"
 
其实条件判断还可以用类似正则表达式的方式进行表示,这样可以减少变量,而且,可以简化你的程序。
 
 
 
 
 
 
 
 
 
 
 
阅读(1556) | 评论(0) | 转发(0) |
0

上一篇:sed和awk的简单使用

下一篇:脚本练习

给主人留下些什么吧!~~