Teng's blog Teng's blog
首页
Java
H5前端
GitHub (opens new window)
首页
Java
H5前端
GitHub (opens new window)
  • 介绍

  • 安装

  • 基础

  • shell

    • 介绍
    • 入门
    • 系统变量
    • 自定义变量
    • 环境变量
    • 位置参数变量
    • 预定义变量
    • 运算符
    • 条件判断
    • 流程控制
      • if 判断
        • 写法1
        • 写法2
      • case 语句
      • for 循环
        • 写法1
        • 写法2
      • while 循环
    • 读取控制台输入
    • 系统函数-路径文件名
    • 自定义函数
    • 工具
    • 数据库备份案例
  • 面试与总结
  • System-Linux
  • shell
Shetengteng
2022-02-26

流程控制

注意:在idea中编写sh时,需要将换行符设置为LF,否则在linux下执行会出错

# if 判断

基本语法

  • [ 条件表达式 ],括号和条件表达式之间必须要有空格
  • if 后要有空格

# 写法1

if [ 条件表达式 ];then
	...
elif [ 条件表达式2 ];then
	...
else 
	...
fi
1
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
  • 执行
[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

推荐使用

if [ 条件表达式 ]
then 
		...
elif [ 条件表达式2 ]
then
		...
else 
	...
fi
1
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

# case 语句

基本语法

  • case 尾行必须in单词结尾,每一个模式匹配必须使用 ) 结束
  • 双分号 ;; 表示命令序列结束,相当于java中的break
  • 最后的 *) 表示默认模式,相当于java中的default
case $变量名 in
"值1")
...
;;
"值2")
...
;;
*)
#default
;;
esac
1
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

# 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

示例

  • 打印输入的参数
#!/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
  • 执行
[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
  • 如果是字符串
#!/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
  • 结果
[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

for ((初始值; 循环控制条件; 变量变化))
	do
		...
done

#或 避免换行,将do放在for一行上
for ((初始值;循环控制条件;变量变化));do
		...
done
1
2
3
4
5
6
7
8
9

示例

#!/bin/bash
for ((i=1;i<5;i++));do
	echo $i
done
1
2
3
4
  • 执行
[root@hadoop100 sh-demo]# ./for.sh 
1
2
3
4
1
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

# while 循环

基本语法

while [ 条件表达式 ]
do
    ...
done
1
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
Last Updated: 2022/03/20, 10:04:55
条件判断
读取控制台输入

← 条件判断 读取控制台输入→

Theme by Vdoing | Copyright © 2021-2022 Shetengteng | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式