FOR循环
for 变量 in 列表; do
循环体
done
如何生成列表:
{1..100}
`seq 起始数 步进长度 结束数`
1,...,100
declare -i SUM=0
integer
-x
遍历完成之后,退出;
CASE循环
case语句:选择结构
case SWITCH in
value1)
statement1
...
;;
value2)
statement2
...
;;
*)
statement3
...
;;
esac
若switch=value1则执行statement1
若switch=value2则执行statement2
若switch=*(任意字符)则执行statement3
WHILE循环
while循环:适用于循环次数未知的场景,要有退出条件
语法:
while CONDITION; do
statment
done
进入循环:条件满足
退出循环:条件不满足
UNTIL循环
until CONDITION; do
statement
...
done
until
进入循环:条件不满足
退出循环:条件满足
练习
计算100以内所有正整数的和
#!/bin/bash
declare -i I=1
declare -i SUM=0
while [ $I -le 100 ]; do
let SUM+=$I
let I++
done
echo $SUM
练习:转换用户输入的字符为大写,除了quit
#!/bin/bash
#
read -p "Input something: " STRING
while [ $STRING != 'quit' ]; do
echo $STRING | tr 'a-z' 'A-Z'
read -p "Input something: " STRING
done
练习:每隔5秒查看hadoop用户是否登录,如果登录,显示其登录并退出;否则,显示当前时间,并说明hadoop尚未登录:
#!/bin/bash
#
who | grep "hadoop" &> /dev/null
RETVAL=$?
while [ $RETVAL -ne 0 ]; do
echo "`date`, hadoop is not log."
sleep 5
who | grep "hadoop" &> /dev/null
RETVAL=$?
done
echo "hadoop is logged in."
写一个脚本,完成以下功能:
说明:此脚本能同一个repo文件中创建多个yum源的指向。
1、接受一个文件名作为参数,此文件存放至/etc/yum.repos.d目录中,文件名以.repo为后缀;要求,此文件不能事先存在,否则,报错;
2、在脚本中,提醒用户输入repo id:如果为quit,则退出脚本;否则,继续完成下面的步骤;
3、Repo name 以及baseurl的路径,而以后以repo文件的格式将保存至指定的文件中;
4、Enabled默认为1,而gpgcheck默认设置为0
5、此脚本会循环多次,除非用户repo id指定为quit
#/bin/bash
#
REPOFILE=/etc/yum.repos.d/$1
If [ -e $1 ];then
Echo “$1 exist.”
Exit 3
Fi
Read -p “repository ID” REPOID
Until [ $REPOID == “quit” ];do
Echo “[$REPOID]” >> $REPOFILE
Read -p “repository name:” REPONAME
Echo “name=$REPONAME” >> $REPOFILE
Read -p “repository baseurl:” REPOURL
Echo “baseurl=$REPOURL” >> $REPOFILE
Echo -e ‘enabled=1\ngpgcheck=0’>> $REPOFILE
Read -p “repository ID:” REPOID
done
until