shell-基础语法
# 变量
# 变量分类
- 本地变量
- 全局变量
- 内置变量
# 变量定义
变量名=变量值
- 变量值必须是一个整体,中间没有特殊字符。
- 等号
=
两侧不能有空格。
- 方式一
变量名='变量值'
- 变量值使用
''
单引号时,所进即所得
[root@root-aliyun ~]$ username="小花花" [root@root-aliyun ~]$ echo $username 小花花 [root@root-aliyun ~]$ powerful='the best powerful man is $username' [root@root-aliyun ~]$ echo $powerful # 当变量值使用单引号时,不会引用变量值中所引用的变量的值(即所进及所得) the best powerful man is $username
1
2
3
4
5
6
7- 变量值使用
- 方式二
变量名="变量值"
[root@root-aliyun ~]$ username="小花花" [root@root-aliyun ~]$ echo $username 小花花 [root@root-aliyun ~]$ handsome="the best handsome person is $username" [root@root-aliyun ~]$ echo $handsome the best handsome person is 小花花
1
2
3
4
5
6
- 方式三
变量名=$(Linux命令)
,比较常用
[root@root-aliyun ~]$ output=$(ll /opt) [root@root-aliyun ~]$ echo $output 总用量 44K drwxr-xr-x 6 root root 4.0K 2月 14 2018 allure-2.6.0 drwxrwxr-x 5 root root 4.0K 4月 12 14:27 baidunetdisk drwxr-xr-x 4 root root 4.0K 10月 24 2019 cisco drwx--x--x 4 root root 4.0K 12月 2 2019 containerd drwxr-xr-x 4 root root 4.0K 10月 22 2019 deepinwine drwxrwxr-x 6 root root 4.0K 4月 3 20:59 electron-ssr drwxr-xr-x 3 root root 4.0K 10月 21 2019 google drwxr-xr-x 5 root root 4.0K 6月 17 23:52 ieaseMusic drwxr-xr-x 3 root root 4.0K 10月 21 2019 kingsoft drwxr-xr-x 3 root root 4.0K 10月 23 2019 netease drwxr-xr-x 4 root root 4.0K 6月 21 12:48 teamviewer
1
2
3
4
5
6
7
8
9
10
11
12
13
14 - 上述三种方式定义的变量均为本地变量
# 全局变量
- 通过
env
命令查看环境变量(只显示全局变量)- env命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。该命令只使用"-"作为参数选项时,隐藏了选项"-i"的功能。若没有设置任何选项和参数时,则直接显示当前的环境变量。
[root@aliyun ~]$ env XDG_SESSION_ID=10559 HOSTNAME=aliyun SHELL=/bin/bash ......
1
2
3
4
5 - 定义全局变量
- 方法一
变量=值 export 变量
1
2 - 方法二(最常用)
export 变量=值
1 - 方法三(这种方法创建的环境变量在任何时刻都有效)
- 把
export 变量=值
添加到~/.bashrc
配置文件的末尾,然后使用source ~/.bashrc
激活配置文件。 ~/bashrc
:为每一个运行bash shell
的用户执行此文件
。当bash shell
被打开时,该文件被读取。
# 将下边这句export语句添加到~/.bashrc文件的末尾 export GOROOT=/usr/local/go #GOROOT是系统上安装Go软件包的位置。 # 激活配置文件的配置 source ~/.bashrc
1
2
3
4 - 把
- 方法一
# 查看变量
- 方式一(在终端bash界面中最常用)
echo "$变量名"
[root@root-aliyun ~]$ username="小花" [root@root-aliyun ~]$ echo "$username" 小花
1
2
3
- 方式二(在终端bash界面中最常用)
echo $变量名
[root@root-aliyun ~]$ username="熊二" [root@root-aliyun ~]$ echo $username 熊二
1
2
3
- 方式三(在终端bash界面可以使用但在写bash脚本时必须用这种方式)
echo "${变量名}"
[root@root-aliyun ~]$ username="熊大" [root@root-aliyun ~]$ echo "${username}" 熊大
1
2
3
# 内置变量
$0
:获取当前执行的shell脚本文件名,包括脚本路径。$n
:获取当前执行的shell脚本的第n个参数值,n=1—>9
,如果n>9
就要用大括号{}
括起来,如接收第10个参数应该写为${10}
。$#
:获取当前shell命令行中参数的总个数$*
:获取当前shell脚本的所有命令行参数$?
:获取执行上一个指令的返回值(0为成功,非0为失败)0
为成功
[root@root-aliyun ~]$ ls log Deepin-QQ.log kill.sh.log run.sh.log [root@root-aliyun ~]$ echo "$?" 0
1
2
3
4非0
即为失败
[root@root-aliyun ~]$ cat haha.txt cat: haha.txt: 没有那个文件或目录 [root@root-aliyun ~]$ echo "$?" 1
1
2
3
4
$USER
echo "$USER"
:获取当前登录用户
$PWD
echo "$PWD"
:获取当前目录的路径
$HOME
echo "$HOME"
:获取当前家目录的路径
$SHELL
echo "$SHELL"
:获取shell
的路径
# 数值运算
# 支持的运算符
支持+
,-
,*
,/
,%
,<
,<=
,>
,>=
,=
,!=
运算
# 数值运算表达式
- 表达式一(最常用)
$((算术表达式))
,算术表达式中引用的变量前面的$
可选[root@root-aliyun ~]$ echo "$((2 * 3))" 6 [root@root-aliyun ~]$ num1=60 [root@root-aliyun ~]$ num2=30 [root@root-aliyun ~]$ echo "$(($num1 / $num2))" 2 [root@root-aliyun ~]$ echo "$((num1 / num2))" 2
1
2
3
4
5
6
7
8
- 表达式二
expr
算术表达式[root@root-aliyun ~]$ echo "$num1" 60 [root@root-aliyun ~]$ echo "$num2" 30 [root@root-aliyun ~]$ echo "$(expr $num1 \* $num2)" 1800 [root@root-aliyun ~]$ echo "$(expr $num1 \+ $num2)" 90 [root@root-aliyun ~]$ echo "$(expr $num1 \- $num2)" 30 [root@root-aliyun ~]$ echo "$(expr $num1 \% $num2)" 0
1
2
3
4
5
6
7
8
9
10
11
12
# 条件表达式
使用[ 条件表达式 ]
来定义,条件表达式与[]
两侧必须用空格隔开
# 返回值
- 条件
成立
,返回0
[root@root-aliyun ~]$ [ 1 == 1 ] [root@root-aliyun ~]$ echo "$?" 0
1
2
3 - 条件
不成立
,返回1
[root@root-aliyun ~]$ [ 1 == 15 ] [root@root-aliyun ~]$ echo "$?" 1
1
2
3
# 逻辑表达式
&&
和||
:&&
相当于Python逻辑表达式中的and
,||
相当于Python逻辑表达式中的or
。[root@root-aliyun ~]$ [ 5 == 5 ] && echo "true" true [root@root-aliyun ~]$ [ 5 == 5 ] || echo "true" [root@root-aliyun ~]$ [ 5 == 15 ] || echo "false" false [root@root-aliyun ~]$ [ 5 == 5 ] && echo "true" || echo "false" true [root@root-aliyun ~]$ [ 5 == 6 ] && echo "true" || echo "false" false [root@root-aliyun ~]$ [ 5 != 6 ] && echo "true" || echo "false" true [root@root-aliyun ~]$ user="熊大" [root@root-aliyun ~]$ [ "${user}" == "熊大" ] && echo "YES" || echo "NO" YES [root@root-aliyun ~]$ [ "${user}" == "熊二" ] && echo "YES" || echo "NO" NO [root@root-aliyun ~]$ [ "${user}" != "熊二" ] && echo "YES" || echo "NO" YES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 文件表达式
-f
:判断输入内容是否是一个文件[root@root-aliyun ~]$ ll 总用量 20 -rw-rw-r-- 1 root root 7566 6月 26 11:19 a.txt -rw-rw-r-- 1 root root 924 6月 26 12:40 case.log drwxrwxr-x 2 root root 4096 6月 27 19:15 haha -rw-rw-r-- 1 root root 47 6月 26 13:13 language.txt [root@root-aliyun ~]$ [ -f "language.txt" ] && echo "是文件" || echo "不是文件" 是文件 [root@root-aliyun ~]$ [ -f "haha/" ] && echo "是文件" || echo "不是文件" 不是文件 [root@root-aliyun ~]$ [ -f "haha" ] && echo "是文件" || echo "不是文件" 不是文件 [root@root-aliyun ~]$
1
2
3
4
5
6
7
8
9
10
11
12
13-d
:判断输入内容是否是一个目录[root@root-aliyun ~]$ ll 总用量 20 -rw-rw-r-- 1 root root 7566 6月 26 11:19 a.txt -rw-rw-r-- 1 root root 924 6月 26 12:40 case.log drwxrwxr-x 2 root root 4096 6月 27 19:15 haha -rw-rw-r-- 1 root root 47 6月 26 13:13 language.txt [root@root-aliyun ~]$ [ -d "haha" ] && echo "是一个目录" || echo "不是一个目录" 是一个目录 [root@root-aliyun ~]$ [ -d "language.txt" ] && echo "是一个目录" || echo "不是一个目录" 不是一个目录
1
2
3
4
5
6
7
8
9
10-x
:判断输入内容是否可执行[root@root-aliyun ~]$ ll 总用量 20 -rw-rw-r-- 1 root root 7566 6月 26 11:19 a.txt -rw-rw-r-- 1 root root 924 6月 26 12:40 case.log drwxrwxr-x 2 root root 4096 6月 27 19:15 haha -rw-rw-r-- 1 root root 47 6月 26 13:13 language.txt [root@root-aliyun ~]$ [ -x "haha" ] && echo "有可执行权限" || echo "没有可执行 权限" 有可执行权限 [root@root-aliyun ~]$ [ -x "language.txt" ] && echo "有可执行权限" || echo "没 有可执行权限" 没有可执行权限 [root@root-aliyun ~]$
1
2
3
4
5
6
7
8
9
10
11-e
:判断文件是否存在[root@root-aliyun ~]$ ls a.txt case.log language.txt test.txt [root@root-aliyun ~]$ [ -e "test.txt" ] && echo "文件存在" || echo "文件不存在" 文件存在 [root@root-aliyun ~]$ rm -rf test.txt [root@root-aliyun ~]$ [ -e "test.txt" ] && echo "文件存在" || echo "文件不存在" 文件不存在
1
2
3
4
5
6
7
# 数值操作符
n1 -eq n2
:判断n1和n2是否相等
[root@root-aliyun ~]$ num1=45 [root@root-aliyun ~]$ num2=45 [root@root-aliyun ~]$ [ "${num1}" -eq "${num2}" ] && echo "num1==num2:"${num1}"=="${num2}"" || echo "num1!=num2:"${num1}"!="${num2}"" num1==num2:45==45
1
2
3
4n1 -gt n2
:判断n1是否>
n2,其中g
是指greater
[root@root-aliyun ~]$ num1=45 [root@root-aliyun ~]$ [ "${num1}" -gt 15 ] && echo "num1>15:"${num1}">15" || echo "num1<15:"${num1}"<15" num1>15:45>15
1
2
3n1 -lt n2
:判断n1是否<
n2,其中l
是指less
[root@root-aliyun ~]$ num3=10 [root@root-aliyun ~]$ num1=45 [root@root-aliyun ~]$ [ "${num3}" -lt "${num1}" ] && echo "num3<num1:"${num3}"<"${num1}"" || echo "num3>num1:"${num3}">"${num1}"" num3<num1:10<45 [root@root-aliyun ~]$ num3=100 [root@root-aliyun ~]$ [ "${num3}" -lt "${num1}" ] && echo "num3<num1:"${num3}"<"${num1}"" || echo "num3>num1:"${num3}">"${num1}"" num3>num1:100>45
1
2
3
4
5
6
7n1 -ne n2
:判断n1是否!=
n2[root@root-aliyun ~]$ num3=100 [root@root-aliyun ~]$ num1=45 [root@root-aliyun ~]$ [ "${num3}" -ne "${num1}" ] && echo "num3!=num1:"${num3}"!="${num1}"" || echo "num3==num1:"${num3}"=="${num1}"" num3!=num1:100!=45 [root@root-aliyun ~]$ num3=45 [root@root-aliyun ~]$ [ "${num3}" -ne "${num1}" ] && echo "num3!=num1:"${num3}"!="${num1}"" || echo "num3==num1:"${num3}"=="${num1}"" num3==num1:45==45
1
2
3
4
5
6
7n1 -ge n2
:判断n1是否>=
n2n1 -le n2
:判断n1是否<=
n2
# 字符串比较
str1 == str2
:判断str1
和str2
的字符串内容是否一致[root@root-aliyun ~]$ str1="haha" [root@root-aliyun ~]$ str2="haha" [root@root-aliyun ~]$ [ "${str1}" == "${str2}" ] && echo "str1==str2:"${str1}"=="${str2}"" || echo "str1!=str2:"${str1}"!="${str2}"" str1==str2:haha==haha [root@root-aliyun ~]$ str2="lala" [root@root-aliyun ~]$ [ "${str1}" == "${str2}" ] && echo "str1==str2:"${str1}"=="${str2}"" || echo "str1!=str2:"${str1}"!="${str2}"" str1!=str2:haha!=lala
1
2
3
4
5
6
7str1 != str2
:判断str1
和str2
的字符串内容是否不一致[root@root-aliyun ~]$ str1="haha" [root@root-aliyun ~]$ str2="lala" [root@root-aliyun ~]$ [ "${str1}" != "${str2}" ] && echo "str1!=str2:"${str1}"!="${str2}"" || echo "str1==str2:"${str1}"=="${str2}"" str1!=str2:haha!=lala [root@root-aliyun ~]$ str2="haha" [root@root-aliyun ~]$ [ "${str1}" != "${str2}" ] && echo "str1!=str2:"${str1}"!="${str2}"" || echo "str1==str2:"${str1}"=="${str2}"" str1==str2:haha==haha
1
2
3
4
5
6
7
# shell脚本格式
# 格式要求
- 在
shell
脚本文件首行指定执行shell
的程序以及相关说明#!/bin/bash # @Time :2020/6/27 下午8:08 # @Author :passerby223 # @Description :
1
2
3
4 shell
脚本文件后缀,建议命令为.sh
- 脚本执行失败时,使用
exit
返回非零值,来退出程序。 - 默认缩进4个空格
shell
脚本的命名简单,有意义
# 注释
- 单行注释
# 这是单行注释
1 - 多行注释
echo "start" :<<! shell中用`:<<`后面跟上任意字符来注释多行。 echo "哈哈" ! echo "stop"
1
2
3
4
5
6
# 函数
# 定义
- 格式一
函数名() { command1 command2 ... }
1
2
3
4
5
6[root@root-aliyun ~]$ cat greet.sh #!/bin/bash # @Time :2020/6/28 下午10:21 # @Author :passerby223 # @Description : # 声明函数,可以省略函数关键字:function greet() { # 使用`-e`对`\n`进行转义,否则输出不会换行。 echo -e "Hello, ${LOGNAME}.\nToday is $(date)" } # 调用函数 greet [root@root-aliyun ~]$ /bin/bash greet.sh Hello, root. Today is 2020年 06月 28日 星期日 22:26:49 CST
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 - 格式二
function 函数名() { command1 command2 ... }
1
2
3
4
5
6[root@root-aliyun ~]$ cat function1.sh #!/bin/bash # @Time :2020/6/28 下午10:07 # @Author :passerby223 # @Description : # 声明函数 function func1() { # 打印`HelloWord!` echo "HelloWorld!" } # 调用函数 func1 [root@root-aliyun ~]$ /bin/bash function1.sh HelloWorld!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 函数带参数
- 函数体调用参数
函数名() { 函数体 $n }
1
2
3
4 - 调用函数给函数体传参数
函数名 参数
1
代码示例
[root@root-aliyun ~]$ cat command_params.sh
#!/bin/bash
# @Time :2020/6/28 下午10:59
# @Author :passerby223
# @Description :
info() {
# 此处的`$1 $2 $3`接受的是函数调用时`info $1 $2 $3`中传递过来的三个参数(也就是函数形参),在方法体内,如果接收到的参数个数>9,就要用大括号`{}`括起来,如接收第10个参数应该写为`${10}`
echo -e "我的名字是:$1\n我的性别是:$2\n我的年龄是:$3"
}
echo -e "当前shell脚本名为:$0\n当前shell脚本命令行参数个数为:$#\n当前shell脚本的所有命令行参数为:$*"
echo "***********************************分割线***********************************"
# 此处的`$1 $2 $3`接收的是命令行传过来的三个参数
info $1 $2 $3
[root@root-aliyun ~]$ bash command_params.sh 小花花 男 18
当前shell脚本名为:command_params.sh
当前shell脚本命令行参数个数为:3
当前shell脚本的所有命令行参数为:小花花 男 18
***********************************分割线***********************************
我的名字是:小花花
我的性别是:男
我的年龄是:18
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 函数使用read
获取用户输入
read
read value
read -p prompt value
[root@root-aliyun ~]$ cat command_input.sh
#!/bin/bash
# @Time :2020/6/28 下午11:33
# @Author :passerby223
# @Description :
# 使用`read`设置用户输入,使用`-p`打印提示信息,`read`命令后边跟变量来保存用户输入
read -p "请输入姓名>>>" name
read -p "请输入年龄>>>" age
read -p "请输入性别>>>" gender
echo "***********************************分割线***********************************"
echo "当前shell脚本名为:$0, 当前shell脚本命令行参数个数为:$#, 当前shell脚本的所有命令行参数为:$*"
echo "***********************************分割线***********************************"
greet() {
echo -e "你好,我的名字是$1,年龄是$2,性别是$3.\n当前shell脚本名为:$0, 当前greet()方法接收到的实参个数为:$#个, 当前greet()方法接收到的实参分别为:$*"
}
# 调用函数并传参
greet ${name} ${age} ${gender}
[root@root-aliyun ~]$ bash command_input.sh
请输入姓名>>>小花花
请输入年龄>>>18
请输入性别>>>女
***********************************分割线***********************************
当前shell脚本名为:command_input.sh, 当前shell脚本命令行参数个数为:0, 当前shell脚本的所有命令行参数为:
***********************************分割线***********************************
你好,我的名字是小花花,年龄是18,性别是女.
当前shell脚本名为:command_input.sh, 当前greet()方法接收到的实参个数为:3个, 当前greet()方法接收到的实参分别为:小花花 18 女
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 流程控制
# if
语句
# 示例一
[root@root-aliyun ~]$ cat process_control_if.sh
#!/bin/bash
# @Time :2020/6/28 下午11:57
# @Author :passerby223
# @Description :
read -p "请输入你的年龄>>>" age
if [ ${age} -gt 60 ]; then
echo "年龄大了,玩不动游戏了!"
elif [ ${age} -gt 18 ]; then
echo "成年了,可以去网吧玩游戏了!"
else
echo "还未成年呢,不可以去网吧玩游戏哦!"
fi
[root@root-aliyun ~]$ /bin/bash process_control_if.sh
请输入你的年龄>>>64
年龄大了,玩不动游戏了!
[root@root-aliyun ~]$ /bin/bash process_control_if.sh
请输入你的年龄>>>21
成年了,可以去网吧玩游戏了!
[root@root-aliyun ~]$ /bin/bash process_control_if.sh
请输入你的年龄>>>15
还未成年呢,不可以去网吧玩游戏哦!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 示例二
[root@root-aliyun ~]$ cat process_control_if.sh
#!/bin/bash
# @Time :2020/6/28 下午11:57
# @Author :passerby223
# @Description :
read -p "请输入你的年龄>>>" age
if [ ${age} -gt 60 ]
then
echo "年龄大了,玩不动游戏了!"
elif [ ${age} -gt 18 ]
then
echo "成年了,可以去网吧玩游戏了!"
else
echo "还未成年呢,不可以去网吧玩游戏哦!"
fi
[root@root-aliyun ~]$ /bin/bash process_control_if.sh
请输入你的年龄>>>78
年龄大了,玩不动游戏了!
[root@root-aliyun ~]$ /bin/bash process_control_if.sh
请输入你的年龄>>>45
成年了,可以去网吧玩游戏了!
[root@root-aliyun ~]$ /bin/bash process_control_if.sh
请输入你的年龄>>>11
还未成年呢,不可以去网吧玩游戏哦!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# for
循环
# 格式一
# 示例一
[root@root-aliyun ~]$ cat for_loop_test.sh
#!/bin/bash
# @Time :2020/6/29 上午12:37
# @Author :passerby223
# @Description :
# for循环遍历输出1-10
max=10
for ((i = 1; i <= ${max}; i++)); do
echo "${i}"
done
[root@root-aliyun ~]$ /bin/bash for_loop_test.sh
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 示例二
[root@root-aliyun ~]$ cat for_loop_test.sh
#!/bin/bash
# @Time :2020/6/29 上午12:37
# @Author :passerby223
# @Description :
# for循环遍历输出1-10
max=10
for ((i = 1; i <= ${max}; i++))
do
echo "${i}"
done
[root@root-aliyun ~]$ /bin/bash for_loop_test.sh
1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 格式二
# 示例一
[root@root-aliyun ~]$ cat for_loop_test1.sh
#!/bin/bash
# @Time :2020/6/29 上午12:42
# @Author :passerby223
# @Description :
# shellcheck disable=SC2045
for i in $(ls /opt); do
echo "${i}"
done
[root@root-aliyun ~]$ /bin/bash for_loop_test1.sh
allure-2.6.0
baidunetdisk
cisco
containerd
deepinwine
electron-ssr
google
ieaseMusic
kingsoft
netease
teamviewer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 示例二
[root@root-aliyun ~]$ cat for_loop_test1.sh
#!/bin/bash
# @Time :2020/6/29 上午12:42
# @Author :passerby223
# @Description :
for i in {Python,Java,GO,PHP}
do
echo "${i}"
done
[root@root-aliyun ~]$ /bin/bash for_loop_test1.sh
Python
Java
GO
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 示例三
[root@root-aliyun ~]$ cat for_loop_test1.sh
#!/bin/bash
# @Time :2020/6/29 上午12:42
# @Author :passerby223
# @Description :
for i in Python Java GO PHP
do
echo "${i}"
done
[root@root-aliyun ~]$ /bin/bash for_loop_test1.sh
Python
Java
GO
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# while
循环
只要条件满足,就一直循环
[root@root-aliyun ~]$ cat while_loop.sh
#!/bin/bash
# @Time :2020/6/30 上午12:23
# @Author :passerby223
# @Description :
# 获取用户输入
read -p "请输入一个数字>>>" num
# 定义数字累加函数
function countNum() {
num_count=0
n=1
while [ $n -lt $(($1 + 1)) ]; do
num_count=$(($n + $num_count))
n=$(($n + 1))
done
echo "从1累加到$1的结果为:$num_count"
}
# 调用countNum函数并传入用户输入的实参:num
countNum $num
[root@root-aliyun ~]$ /bin/bash while_loop.sh
请输入一个数字>>>100
从1累加到100的结果为:5050
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# until
循环
只要条件不满足,就一直循环
[root@root-aliyun ~]$ cat until_loop.sh
#!/bin/bash
# @Time :2020/6/30 上午12:54
# @Author :passerby223
# @Description :
# 获取用户输入
read -p "请输入一个数字>>>" num
# 定义数字累加函数
function countNum() {
num_count=0
i=$1
until [ $i -lt 1 ]; do
num_count=$(($num_count + $i))
i=$(($i - 1))
done
echo "从1累加到$1的结果为:$num_count"
}
# 调用countNum函数并传入用户输入的实参:num
countNum $num
[root@root-aliyun ~]$ /bin/bash until_loop.sh
请输入一个数字>>>100
从1累加到100的结果为:5050
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# case
语句
*
是指其它pattern
都不满足的情况下会被执行
# 用case语句编写一个支持数字加减乘除四则运算的程序
- 执行脚本时,输入数字表达式,如:
/bin/bash case_num_count.sh 3 \* 3
,程序会自动打印计算结果
[root@root-aliyun ~]$ cat case_num_count.sh
#!/bin/bash
# @Time :2020/6/30 上午1:14
# @Author :passerby223
# @Description :
if [ ! $# -eq 3 ]; then
echo -e "Usge:\n $0 num1 +|-|*|/ num2"
exit 1
fi
case $2 in
+)
echo "$1+$3=$(($1 + $3))"
;;
-)
echo "$1-$3=$(($1 - $3))"
;;
\*)
echo "$1*$3=$(($1 * $3))"
;;
/)
echo "$1/$3=$(($1 / $3))"
;;
*)
echo "输入格式有误!未匹配到运算符!"
;;
esac
[root@root-aliyun ~]$ /bin/bash case_num_count.sh 12 + 4
12+4=16
[root@root-aliyun ~]$ /bin/bash case_num_count.sh 12 - 4
12-4=8
[root@root-aliyun ~]$ /bin/bash case_num_count.sh 12 \* 4
12*4=48
[root@root-aliyun ~]$ /bin/bash case_num_count.sh 12 / 4
12/4=3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
编辑 (opens new window)
上次更新: 2023/01/04, 02:34:17
- 01
- Python实现对字符串的加解密02-25
- 02
- Python3对大文件中指定字符进行排序再写入到新的文件10-24
- 03
- Ubuntu下配置adb环境连接Android设备进行调试08-17