此文档既可以当技术文档浏览学习,也可直接当脚本运行。
#!/bin/bash
#脚本练习
#shell脚本中常用的逻辑语句
#if...else...fi 简单判断语句
if_one(){
echo "简单的if语句"
read -p "Please enter any values >" var
if [ -n "$var" ];then
echo "您输入的是$var"
else
echo "你输入的是空"
fi
}
#if...elif...fi 复杂判断语句
if_two(){
echo -e "稍微复杂的if语句\n"
read -p "Please enter a number >" num
if [ $num -eq 100 ];then
echo very good
elif [ $num -gt 80 ];then
echo good
elif [ $num -gt 60 ];then
echo gread
elif [ $num -lt 60 ];then
echo too bad
else
echo "你确定你输入的是数字吗?"
if_two
fi
}
#for..do...done循环(共三种格式)
#格式一
# for 变量
# do
# 语句
# done
#格式二
# for 变量 in 列表
# do
# 语句
# done
#格式三
# for ((变量=初始值; 条件判断; 变量变化))
# do
# 语句
# done
for_one(){
#格式一:例
echo -e "for的简单格式一\n"
n=0
m=1
for i in $n $n
do
echo "$n+10"|bc
sleep 1
done
}
for_two(){
#格式二:例
echo -e "for的简单格式二\n"
for i in `seq 1 10`
do
echo -e -n "\a循环$i次\b\b\b\b\b\b\b\b\b"
sleep 1
done
}
for_three(){
#格式三:例
echo -e "for的简单格式三\n"
for ((i=0; i<10; ++i))
do
echo "循环 $i 次"
sleep 1
done
}
#关于位置变量 $0 $1 $2....$#
#$0脚本名,或函数名,也就是说第一个
#$1 第二个参数
#$#参数个数,不包括$0
case_one(){
case $1 in
int)
if [ -n "$3" ];then
expr $2 + 0 &>/dev/null
if [ $? -gt 0 ];then
echo -e "$A请输入数字!$Z"
continue
elif [ $2 -gt $3 ];then
echo -e "$A选项不存在$Z"
continue
fi
else
echo -e "$A请输入数字!$Z"
continue
fi
;;
var)
grep "$2" $3 >> $LOG 2>&1
if [ $? -eq 0 ];then
echo -e "\n $A配置的$2已存在!$Z"
exit
fi
;;
yesno)
case $2 in
[yY][eE][sS]|[Yy])
yesno=y
;;
[nN][oO]|[Nn])
yesno=n
;;
*)
echo -e -n "\n$A请按指示输入[y|n|yes|no]$Z >"
read yesno
svn_check yesno $yesno
;;
esac
;;
*)
echo -e "$A未知的函数选项 $1 $Z"
exit
;;
esac
}
#shell中的数组用法
#list=[if_one if_two for_one for_two for_three]
#获取数组总个数 echo ${#list[@]} 或 echo ${#list[*]}
#取得数组单个元素的长度 echo ${#list[n]} 其中n 指的是数字
#获取数组中所有值 echo ${list[@]} 或 echo ${list[*]}
#取得数组单个元素 echo ${list[n]} 其中n 指的是数字
tuples(){
list=(
if_one
if_two
for_one
for_two
for_three
quit
)
for i in `seq 1 ${#list[*]}`
do
let n=i-1
echo "$i ${list[$n]}"
done
read -p "你想调用哪个函数:" xuan
}
quit(){
break
}
#while循环的格式
# while expression
# do
# command
# command
# ```
# done
# 1,计数器控制的while循环
# 主要用于已经准确知道要输入的数据和字符串的数目。
# 2,结束标记控制的while循环
# 主要用于不知道读入数据的个数,但是可以设置一个特殊的数据值来结束循环,该特殊值称为结束标 记,通过提示用户输入进行操作
# 3,标致控制的while循环
# 用户输入标志值来控制循环结束
# 4,命令行控制的while循环
#
while tuples
do
case_one int $xuan ${#list[@]}
let i=$xuan-1
echo -e "\n############## ${list[$i]} ###############\n"
${list[$i]}
echo -e "\n############## END ###############\n"
#break #break语句用于终止整个循环的执行,完成后所有行代码break语句的执行。然后,它逐级的代码跟在循环结束。
continue #continue语句break命令类似,但它会导致当前迭代的循环退出,而不是整个循环。
done