循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构 。

 

循环:进入条件,退出条件

            for

            while

            until

 

for循环结构:

        for 变量 in 列表; do

            循环体

        done

遍历完成之后,退出;

 

如何生成列表:

{1..100}

`seq [起始数 [步进长度]] 结束数`

 

例:求1-100 所有整数的和

            #!/bin/bash

            #

            declare -i SUM=0           变量默认为字符串  declare 声明 -i integer 整型 bash不支持浮点运算

                                                    declare -x  将变量生成环境变量

            for I in {1..100]; do

                let SUM=$[$SUM+$I]

            done

            

            echo "The sum is: $SUM."

 

 

例:向当前系统上所有用户问好

            #!/bin/bash

            #

            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

 

作业:

    写一个脚本:

        1. 设定变量FILE的值为/etc/passwd

        2. 依次向/etc/passwd 中的用户问好,并显示对方的shell,形如:

            Hello, root, your shell: /bin/bash

        3. 统计一共有多少个用户

        拓展:

        只向默认shell为bash的用户问好

 

    写一个脚本

        1. 添加10个用户user1 到user10,密码同用户名,但要求只有用户不存在的情况下才能添加;

        扩展:

        接受一个参数:

            add:添加用户user1...user10

            del:删除用户user1...user10

            其他:退出

#!/bin/bash
#

for I in {1..10}; do
        if id user$I &> /dev/null; then
                echo "user$I exist."
        else
             useradd user$I
                echo user$I | passwd --stdin user$I &> /dev/nu$
                echo "Add user user$I finished."
        fi
done

 

 

#!/bin/bash
#

if [ $# -lt 1 ]; then
 echo"Usage: adminusers ARG"
 exit 7
fi

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


elif [ $1 == 'del' ]; then
 for I in {1..10}; do
  if id user$I &> /dev/null; then
   userdel user$I
   echo "user$I deleted finished."
  else
   echo "user$I not exist."
     fi
 done
else
 echo "Unknown ARG"
 exit 8
fi

 
编辑脚本:

    useradmin2 user1,user2,user3 ... 依次添加用户自指定的用户;

#!/bin/bash
#

echo $1
for I in `echo $1 | sed 's/,/ /g'`; do
    if id $I &>/dev/null; then
          echo "$I exist."
    else
          useradd $I
          echo $I | passwd --stdin $I &> /dev/null
          echo "Add $I finished."
     fi
done

 

useradmin3 --add user1,user2,user3...

useradmin3 --del user1,user2,user3...

 

#!/bin/bash

#

    

if [ $1 == '--add' ]; then

    for I in `echo $2 | sed 's/,/ /g'`; do

        if id $I &> /dev/null; then

            echo "$I exists."

        else

            useradd $I

            echo $I | passwd --stdin $I &> /dev/null

            echo "add $I finished."

        fi

    done

elif [ $1 == '--del' ]; then

    for I in `echo $2 | sed 's/,/ /g' `; do

        if id $I &> /dev/null; then

            userdel -r $I

            echo "Delete $I finished."

        else

            echo "$I not exist."

        fi

    done

elif [ $1 == '--help' ]; then

    echo "Usage: usersadmin3 --add USER1,USER2,USER3..| --del USER1,USER2,...| --help"

else

    echo "Unknown options."

fi

 

1-100所有偶数的和及奇数的和。

 

#!/bin/bash
#

declare -i EVENSUM=0
declare -i ODDSUM=0

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

echo "Odd sum is $ODDSUM."
echo "Even sum is $EVENSUM."

 

    写一个脚本:

        计算100以内的所有能被3整除的正整数的和;

                取模,取余:%

                3%2=1

                100%55=45

                

    写一个脚本:

        计算100以内所有奇数的和以及所有偶数的和;分别显示之;

    

    写一个脚本:

          分别显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户, 并统计各类shell下的用户总数。显示结果形如:

            BASH, 3users, they are:

            root, redhat, gentoo

        

            NOLOGIN, 2users, they are:

            bin, ftp