循環需要指定進入條件和退出條件、
常用的循環有for,while,until
for循循環
for 變量 in 列表;do
循環體
done
如何生成列表
{1..100},表示1到100的整數列表
seq 10;表示1到10的整數列表
seq 5 10;表示5到10的整數列表
seq 1 2 10 ;表示1-10的奇數列表 ,步長爲2
seq 2 2 10 ;表示1-10的偶數列表,步長爲2
seq [起始數] [步進數] 結束數,需要命令替換
`ls /etc`也可生成列表
1、求1到100的整數之和
聲明變量:declare 變量類型 變量名
1)
#!/bin/bash # let SUM=0 #declare i SUM=0 for I in {1..100};do let SUM=$[$SUM+$I] done echo "The sum is:$SUM"
2)求100以內的偶數和奇數和
#!/bin/bash # declare -i evensum=0 declare -i oddsum=0 for I in {1..100};do if [ $[$I%2] -eq 0 ];then let oddsum+=$I else let evensum+=$I fi done echo "Oddsum is $oddsum" echo "evensum is $evensum"
2、寫一for循環,顯示當前系統的用戶名及其shell名稱
[root@station01 ~]# cat test19.sh #!/bin/bash # TOTALLINES=`wc -l /etc/passwd | cut -d' ' -f1` for I in `seq 1 $TOTALLINES`;do SYSUSERNAME=`head -n $I /etc/passwd | tail -1 | cut -d: -f1` SYSSHELL=`head -n $I /etc/passwd| tail -1 | cut -d: -f7` echo "Hello,$SYSUSERNAME;--->>>Your shell is:$SYSSHELL;" done3、對第二題進行擴展,如只顯示shell爲/bin/bash的用戶
[root@station01 ~]# cat test20.sh #!/bin/bash # TOTALLINES=`wc -l /etc/passwd | cut -d' ' -f1` for I in `seq 1 $TOTALLINES`;do SYSUSERNAME=`head -n $I /etc/passwd | tail -1 | cut -d: -f1` SYSSHELL=`head -n $I /etc/passwd| tail -1 | cut -d: -f7` if [ $SYSSHELL == "/bin/bash" ];then echo "Hello,$SYSUSERNAME;--->>>Your shell is:$SYSSHELL;" fi done
4、添加用戶user1-user10到當前系統,如果用戶存在則顯示用戶已存在,否則添加、設置密碼與用戶名相同並顯示加成功
#!/bin/bash # for I in {1..10};do if ! id -u -n user$I &>/dev/null ;then useradd user$I echo "user$I" | passwd --stdin user$I &>/dev/null echo "Add user$I success." else echo "user$I is exist." fi done
5、刪除當前系統用戶user1-user10,如果用戶存在則刪除並顯示已刪除,否則顯示不存在
#!/bin/bash # for I in {1..10};do if id user$I &>/dev/null;then userdel -r user$I &>/dev/null echo "Delete user$I success." else echo "user$I is not exist." fi done
6、寫一腳本,通過參數傳遞,如爲"add"則在當前系統添加10個用戶並決斷用戶是否存在,如存在則顯示用戶存在,否則添加用戶並顯示添加成功;如爲"del",則刪除系統中的user1-user10,如不存在,則顯示用戶不存在,如已刪除顯示用戶已刪除。
#!/bin/bash # if [ $# -lt 1 ];then echo "Usage:administrator.sh ARG" exit 10 fi if [ $1 == '--add' ];then for I in {1..10};do if id user$I &>/dev/null;then echo "user$I is exist." else useradd user$I &>/dev/null echo "user$I" | passwd --stdin user$I &>/dev/null echo "Add user$I success." fi done elif [ $1 == '--del' ];then for I in {1..10};do if id user$I &>/dev/null;then userdel -r user$I &>/dev/null echo "Delete user$I finished." else echo "user$I is not exist." fi done else echo "Unknown arguments." exit 12 fi
7、寫一腳本,通過參數傳遞,添加用戶並顯示信息,如已存在,則顯示用戶存在,參數形如:user1,user3,user9,user10等
#!/bin/bash # if [ $# -lt 1 ];then echo "Usage:administrator.sh ARG" exit 10 fi for I in `echo $1 |sed 's/,/ /g'`;do if id $I &>/dev/null;then echo "$I is exist." else adduser $I &>/dev/null echo "Add $I finished." fi done
8、寫一腳本,通過選項與參數傳遞,增加用戶及刪除用戶;當選項爲"--add"時,參數爲user1,user3,abc3等時表示增加用戶,如--add user1,user3,abc,表示增加用戶user1,user3,abc;當選項爲"--del"時,參數爲user1,user3,abc3,時,表示刪除用戶,如--del user1,user3,abc3
#!/bin/bash # if [ $# -lt 1 ];then echo "Usage:administrator.sh Option ARG" exit 10 fi # # if [ $1 == '--add' ];then for I in `echo $2 |sed 's/,/ /g'`;do if id $I &>/dev/null;then echo "$I is exist." else adduser $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 &>/dev/null echo "$I is deleted." else echo "No such $I." fi done else echo "Unknown options and username." exit 14 fi
組合條件測試;
-a:與關係
-o:或關係
!:非關係
如:if [ $# -gt 1 -o $# -le 4 ]
if [ $# -gt 1 ] || [ $# -le 4 ]