流程控制
注意:在idea中编写sh时,需要将换行符设置为LF,否则在linux下执行会出错
# if 判断
基本语法
- [ 条件表达式 ],括号和条件表达式之间必须要有空格
- if 后要有空格
# 写法1
if [ 条件表达式 ];then
...
elif [ 条件表达式2 ];then
...
else
...
fi
1
2
3
4
5
6
7
2
3
4
5
6
7
示例
- 创建if.sh文件,赋予权限 chmod 777 if.sh
#!/bin/bash
if [ $1 -eq 1 ];then
echo success
elif [ $1 -eq 2 ];then
echo success2
else
echo fail
fi
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 执行
[root@hadoop100 sh-demo]# ./if.sh 1
success
[root@hadoop100 sh-demo]# ./if.sh 2
success2
[root@hadoop100 sh-demo]# ./if.sh 3
fail
1
2
3
4
5
6
2
3
4
5
6
# 写法2
推荐使用
if [ 条件表达式 ]
then
...
elif [ 条件表达式2 ]
then
...
else
...
fi
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
示例
- 输入的参数大于等于60,输出 及格,小于60 输出 不及格
#!/bin/bash
if [ $1 -ge 60 ]
then
echo "及格"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# case 语句
基本语法
- case 尾行必须in单词结尾,每一个模式匹配必须使用 ) 结束
- 双分号 ;; 表示命令序列结束,相当于java中的break
- 最后的 *) 表示默认模式,相当于java中的default
case $变量名 in
"值1")
...
;;
"值2")
...
;;
*)
#default
;;
esac
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
示例
- 当参数是1时,输出 周一 ,是2时,输出 周二,其他情况输出 other
#!/bin/bash
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# for 循环
# 写法1
值使用空格连接;使用 $* 也可以遍历
for 变量 in 值1 值2 值3 ...
do
...
done
# 或者
for 变量 in 值1 值2 值3 ...;do
...
done
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
示例
- 打印输入的参数
#!/bin/bash
for i in $*;do
echo $i
done
echo ======
for i in $@;do
echo $i
done
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 执行
[root@hadoop100 sh-demo]# ./for.sh 1 2 3 4 5
1
2
3
4
5
======
1
2
3
4
5
# 注意 $* 和 $@ 的区别
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
- 如果是字符串
#!/bin/bash
for i in "$*";do # 说明"$*"执行后是字符串,只有一个元素,显示是一行
echo $i
done
echo ======
for i in "$@";do # 说明"$@"执行后是字符串列,多个元素,每个元素是单个字符串值
echo $i
done
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 结果
[root@hadoop100 sh-demo]# ./for2.sh 1 2 3 4 5
1 2 3 4 5
======
1
2
3
4
5
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 写法2
for ((初始值; 循环控制条件; 变量变化))
do
...
done
#或 避免换行,将do放在for一行上
for ((初始值;循环控制条件;变量变化));do
...
done
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
示例
#!/bin/bash
for ((i=1;i<5;i++));do
echo $i
done
1
2
3
4
2
3
4
- 执行
[root@hadoop100 sh-demo]# ./for.sh
1
2
3
4
1
2
3
4
5
2
3
4
5
- 从1加到100
#!/bin/bash
SUM=0
for((i=1;i<100;i++))
do
SUM=$[$SUM+$i]
done
echo "sum=$SUM"
1
2
3
4
5
6
7
2
3
4
5
6
7
# while 循环
基本语法
while [ 条件表达式 ]
do
...
done
1
2
3
4
2
3
4
示例
- 从命令行输入一个数n,计算1+..+n的值
#!/bin/bash
i=0
SUM=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "sum=$SUM"
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Last Updated: 2022/03/20, 10:04:55