Chinaunix首页 | 论坛 | 博客
  • 博客访问: 74668
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 434
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-23 09:31
个人简介

天行健,君子以自强不息;地势坤,君子以厚德载物

文章分类
文章存档

2018年(11)

2017年(30)

我的朋友

分类: LINUX

2017-04-24 00:46:40

bash脚本编程之五 字符串测试及for循环
1、字符测试:
    ==或=:用于字符串比较是否相同,相等为真,不等为假(等号两端预留空格)
        例:[root@Ourlab ~]# A=hello
            [root@Ourlab ~]# B=hi
            [root@Ourlab ~]# [ $A == $B ]
            [root@Ourlab ~]# echo $?
            1
    !=:用于比较字符串是否不等,不等为真,相等为假
        例:[root@Ourlab ~]# A=hello
            [root@Ourlab ~]# B=hi
            [root@Ourlab ~]# [ $A != $B ]
            [root@Ourlab ~]# echo $?
            0
    -n string:测试指定字符串是否为空,空则真,不空为假
    -z string:测试指定字符串是否不空,空则假,不空为真

for循环:进入条件,退出条件
    用法:
        for 变量 in 列表; do
            循环体
        done
    
   `seq [起始数 [步进长度]] 结束数`:生成数值列表
        例:[root@Ourlab ~]# seq 1 2 10
            1
            3
            5
            7
            9
    declare:声明变量
        -i:将变量声明为整形
        -x:将变量声明为环境变量
    例:写一个脚本,完成1加到100,并显示结果:
        #!/bin/bash
        #
        declare -i SUM=0

        for I in {1..100}; do
            let SUM=$[$SUM+$I];
        done

        echo "The sum is:$SUM."

    
练习一:写一个脚本
传递一个参数(单字符就行)给脚本,如果参数为q,就退出脚本;否则,就显示用户的参数;
#!/bin/bash
#
if [ $1 == "q" ]; then
   echo "EXIT!"
   exit 0
else
   echo "NO EXIT!"
fi

练习二:写一个脚本
传递一个参数(单字符就行)给脚本,如果参数为q,Q、quit或Quit,就退出脚本;否则,就显示用户的参数;
#!/bin/bash
#

if [ $1 == 'q' ]; then
   echo "EXIT."
   exit 0
elif [ $1 == 'Q' ]; then
   echo "EXIT."
   exit 0
elif [ $1 == 'quit' ]; then
   echo "EXIT."
   exit 0
elif [ $1 == 'Quit' ]; then
   echo "EXIT."
   exit 0
else
   echo "$1."
fi

练习三:写一个脚本
传递三个参数给脚本,第一为整数,第二个为算术运算符,第三个为整数,将计算结果显示出来,要求保留两位小数。形如:./calc.sh 5 / 2
#!/bin/bash
#
echo "scale=2;$1$2$3" | bc

练习四:写一个脚本
给脚本传递三个整数,判断其中的最大数和最小数,并显示出来。
#!/bin/bash
#

if [ $# -ne 3 ]; then
   echo "Please input three numbers."
   exit 10
elif [ $1 -ge $2 ]; then
   MAX=$1
   MIN=$2
else
   MAX=$2
   MIN=$1
fi

if [ $3 -gt $MAX ]; then
   MAX=$3
elif [ $3 -lt $MIN ]; then
   MIN=$3
fi

echo "The MAX is $MAX,the MIN is $MIN."

练习五:写一个脚本
1、设定变量FILE的值为/etc/passwd
2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如:Hello,root,your shell:/bin/bash
3、统计一共有多少个用户
提示:for I in `seq 1 $LINES`; do echo "hello, `head -n $I /etc/passwd | tail -1 | cut -d: -f1`" ;done

#!/bin/bash
#
FILE="/etc/passwd"
LINES=`wc -l /etc/passwd | cut -d ' ' -f1`

for I in `seq 1 $LINES`; do
   echo "hello,`head -n $I /etc/passwd | tail -1 | cut -d: -f1`";
done

echo "The users number is $LINES."


练习六:写一个脚本
1、添加10个用户user1到user10,密码同用户名;但要求只有用户不存在的情况下才能添加;
#!/bin/bash
#

for I in `seq 1 10`; do
    cut -d: -f1 /etc/passwd | grep "user$I" 2>> /tmp/etc.err || useradd user$I
done

2、针对上题扩展:接受一个参数:add:添加用户user1...user10;del:删除用户user1...user10;其他:退出
#!/bin/bash
#

if [ $1 = 'add' ]; then
   for I in {1..10};do
       if id user$I &> /dev/null; then
          echo "The user$I is exist."
       else
          useradd user$I
          echo "user$I" | passwd --stdin user$I &> /dev/null
          echo "The user$I already added."
       fi
    done

elif [ $1 = 'del' ]; then
   for I in {1..10}; do
       userdel -r user$I
       echo "The user$I already deleted."
   done
else
   echo "Please input add or del."
   exit 2;
fi


练习七:
写一个脚本:
1、计算100以内所有能被3整除的正整数的和;
取模、取余:%
#!/bin/bash
#
declare -i SUM=0

for I in {1..100}; do
    if [ $[$I%3] -eq 0 ]; then
     SUM=$[$SUM+$I];
    fi
done
echo "The sum is $SUM."

练习八:写一个脚本:
计算100以内所有奇数的和以及所有偶数的和;分别显示之;
#!/bin/bash
#
JSUM=0 #奇数和变量
OSUM=0 #偶数和变量

for I in {1..100}; do
    if [ $[$I%2] -eq 0 ]; then
       OSUM=$[$OSUM+$I];
    else
       JSUM=$[$JSUM+$I];
    fi
done

echo "The OSUM is $OSUM,the JSUM is $JSUM."
阅读(875) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~