循环结构可以减少源程序重复书写的工作量,用来描述重复执行某段算法的问题,这是程序设计中最能发挥计算机特长的程序结构 。
循环:进入条件,退出条件
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