同 kotlin
很相似,通过in
后接数组来表示要遍历的参数,常见写法如下
for var in item1 item2 ... itemN
do
command1
command2
done
实战1:读取文件每一行内容
for url in $(cat ub.log)
do
echo "${url}"
done
实战 2:创建目录和文件
for k in $( seq 1 10 )
do
mkdir /home/uewell/a${k}
cd /home/uewell/a${k}
for l in $( seq 1 10 )
do
mkdir b${l}
cd /home/uewell/a${k}
done
cd ..
done
其中seq
表示生成一堆从 start 到 end 的数组。
seq [选项]... 尾数
seq [选项]... 首数 尾数
seq [选项]... 首数 增量 尾数
实战 3:传统的 C语言写法
for ((i = 1; i <= 10; i++)); do
echo "这是第 $i 次调用"
done
if condition1; then
command1
elif condition2; then
command2
else
commandN
fi
if
的最后结尾是fi
if
的判定条件写法是[ xxx ]
,注意前后都要有空格举例如下
#! /bin/bash
xx() {
if [ $1 -gt 10 ]; then
echo "大于 10"
elif [ $1 -gt 5 ]; then
echo "大于 5,小于 10"
else
echo "小于 5"
fi
}
# 调用
msg=$(xx 20)
echo "20:$msg"
附录常见的 if/while
等判定语句
## 文件相关
if [ -x xx.sh ] # xx.sh 具备执行权限
if [ -d xx ] ## xx为目录
if [ -f xx ] ## xx为文件
## 整数类型判定
if [ 1 -eq 2 ] # -eq表示:等于
if [ 1 -gt 2 ] # -gt 表示:大于等于 `greate than`
if [ 1 -le 2 ] # -ge 表示:小于等于 `less equal`
## 字符串判定
if [ "1" = "2" ] # 注意是 1 个等号
if [ "1" != "@" ] # 不等于
基本的样板代码如下所示
while condition
do
command
done
自增的判定
#! /bin/bash
sum(){
local result=0
local i=0
while [ i < $1 ]
do
result=$((result+i))
i=$((i+1))
# echo $i
done
echo $result
}
result=$(sum 10)
echo $result
类似 switch case 或者 when 这样的表达式
case 值 in
模式1)
command1
;;
模式2)
command2
;;
esac
案例如下
site="runoob"
case "$site" in
"runoob") echo "菜鸟教程"
;;
"google") echo "Google 搜索"
;;
"taobao") echo "淘宝网"
;;
esac
或者
#!/bin/bash
while :
do
echo -n "输入 1 到 5 之间的数字:"
read aNum
case $aNum in
1|2|3|4|5) echo "你输入的数字为 $aNum!"
;;
*) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
break
;;
esac
done