您的位置:首页 > 运维架构 > Shell

Linux学习之十六(bash脚本编程之五 字符串测试及for循环)

2017-05-10 13:48 579 查看
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`,you shell:`head -n $I /etc/passwd | tail -1 | cut -d: -f7`";

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."
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux