参考网址为:【小白入门 通俗易懂】2021韩顺平 一周学会Linux_哔哩哔哩_bilibili
请大家多多支持韩老师~
大部分内容为教程内容,也有部分自己实验和添加的内容,如涉及侵权,会进行删除。
一、运算符基本语法
1、$((运算式))
$[运算式]
或者expr m + n //expression表达式 (注意必须有空格)
2、如果希望将expr的结果赋给某个变量,使用``
3、expr m - n
4、expr \*,/,% 乘除取余
示例1:计算(2+3)*4的值
(1)创建oper.sh脚本
[root@SHUYUAN shcode]# vim oper.sh
(2)编辑内容
#!/bin/bash
#计算(2+3)*4的值
#使用第一种方式
RES1=$(((2+3)*4))
echo "res1=$RES1"
#使用第二种方式
RES2=$[(2+3)*4]
echo "res2=$RES2"
#第三种方式
TEMP=`expr 2 + 3`
RES3=`expr $TEMP \* 4`
echo "TEMP=$TEMP"
echo "res3=$RES3"
(3)输出结果
[root@SHUYUAN shcode]# chmod u+x oper.sh
[root@SHUYUAN shcode]# ./oper.sh
res1=20
res2=20
TEMP=5
res3=20
示例2:请求出命令行的两个参数【整数】的和:20 50
(1)编辑内容
#案例2
SUM=$[$1+$2]
echo "sum=$SUM"
(2)输出结果【位置变量】
[root@SHUYUAN shcode]# ./oper.sh 20 50
sum=70
二、条件判断
1、基本语法:[ condition ] (condition前后有空格]
非空返回true, 可使用$?验证(0为true,>1为false)
2、常用判断条件
(1)= 字符串比较
(2)两个整数的比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于等于
-ne 不等于
(3)按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
(4)按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录
示例1:"ok"是否等于"ok"
(1)创建ifdemo.sh脚本
[root@SHUYUAN shcode]# vim ifdemo.sh
(2)编辑内容
#!/bin/bash
#示例1:"ok"是否等于"ok"
#判断语句:使用 =
#=两端空格
if [ "ok" = "ok" ]
then
echo "equal"
fi
(3)结果输出
[root@SHUYUAN shcode]# chmod u+x ifdemo.sh
[root@SHUYUAN shcode]# ./ifdemo.sh
equal
示例2:23是否大于等于22
(1)编辑内容
#示例2:23是否大于等于22
if [ 23 -ge 22 ]
then
echo "大于等于"
fi
(2)输出结果
[root@SHUYUAN shcode]# ./ifdemo.sh
大于等于
示例3:/root/shcode/aaa.txt 目录中的文件是否存在
(1)编辑内容
#示例3:/root/shcode/aaa.txt 目录中的文件是否存在
if [ -f /root/shcode/aaa.txt ]
then
echo "exit"
fi
(2)结果输出
[root@SHUYUAN shcode]# ./ifdemo.sh
exit
若不存在,不返回结果
三、单分支多分支
1、if判断——单分支
if [ 条件判断式 ]
then
代码
fi
2、多分支
if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
fi
示例:编写一个shell程序,如果输入的参数大于等于60,则输出“及格了”,如果小于60,则“不及格”
(1)创建ifcase.sh脚本
[root@SHUYUAN shcode]# vim ifcase.sh
(2)编辑内容
#!/bin/bash
#示例:编写一个shell程序,如果输入的参数大于等于60,则输出“及格了”,如果小于60,则“不及格”
if [ $1 -ge 60 ]
then
echo "及格"
elif [ $1 -lt 60 ]
then
echo "不及格"
fi
(3)结果输出
[root@SHUYUAN shcode]# chmod u+x ifcase.sh
[root@SHUYUAN shcode]# ./ifcase.sh 59
不及格
[root@SHUYUAN shcode]# ./ifcase.sh 98
及格
四、流程控制
1、case语句基本语法:
case $变量名 in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
……省略其他分支
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
示例:当命令行参数是1时,输出”周一“,是2时,就输出”周二“,其他情况输出”other“
(1)创建testcase.sh脚本
[root@SHUYUAN shcode]# vim ifcase.sh
(2)编辑内容
#!/bin/bash
#当命令行参数是1时,输出”周一“,是2时,就输出”周二“,其他情况输出”other“
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
;;
esac
(3)结果输出
[root@SHUYUAN shcode]# ./testcase.sh 2
周二
[root@SHUYUAN shcode]# ./testcase.sh 1
周一
2、for循环
基本语法1:
for 变量 in 值1 值2 值3……
do
代码
done
示例1:打印命令行输入的参数
(1)创建testfor1.sh脚本
[root@SHUYUAN shcode]# vim testfor1.sh
(2)编辑内容
#!/bin/bash
#示例1:打印命令行输入的参数
##使用$*来获取输入的参数(整体)
for i in "$*"
do
echo "num is $i"
done
#使用$@来获取输入的参数(分别)
echo "===================================="
for j in "$@"
do
echo "num is $j"
done
(3)输出结果
[root@SHUYUAN shcode]# chmod u+x testfor1.sh
[root@SHUYUAN shcode]# ./testfor1.sh 100 200 300
num is 100 200 300
====================================
num is 100
num is 200
num is 300
基本语法2:
for(( 初始值; 循环控制条件; 变量变化 )) #括号里空格,分号后空格
do
代码
done
示例2:从1加到100的值输出显示
(1)创建testfor2.sh脚本
[root@SHUYUAN shcode]# vim testfor2.sh
(2)编辑内容
#!/bin/bash
#示例2:从1加到100的值输出显示
#定义一个变量SUM
SUM=0
for(( i=1; i<=100; i++ ))
do
#写上业务代码
SUM=$[$SUM+$i]
done
echo "总和SUM=$SUM"
(3)输出结果
[root@SHUYUAN shcode]# chmod u+x testfor2.sh
[root@SHUYUAN shcode]# ./testfor2.sh
总和SUM=5050
示例3:使用for求出三位数中的所有水仙花数。(每个位上的数字的三次幂之和等于它本身)
(1)创建sxh.sh脚本
[root@SHUYUAN shcode]# vim sxh.sh
(2)编辑内容
#!/bin/bash
echo "所有水仙花数是: "
for(( i=100; i<=999; i++ ))
do
a=$[$i%100%10]
b=$[$i%100/10]
c=$[$i/100]
s=$[$a*$a*$a+$b*$b*$b+$c*$c*$c]
if [ $s -eq $i ]
then
echo "$i"
fi
done
(3)结果输出
[root@SHUYUAN shcode]# chmod u+x sxh.sh
[root@SHUYUAN shcode]# ./sxh.sh
所有水仙花数是:
153
370
371
407
[root@SHUYUAN shcode]#
3、while循环
基本语法:
while [ 条件判断式 ] #while 和[ 有空格,条件判断式和 ] 有空格
do
代码
done
示例1:从命令行输入一个数n,统计从1+2+……+n的值是多少?
(1)创建testwhile.sh脚本
[root@SHUYUAN shcode]# vim testwhile.sh
(2)编辑内容
#!/bin/bash
#示例1:从命令行输入一个数n,统计从1+2+……+n的值是多少?
SUM=0
i=0
while [ $i -le $1 ]
do
SUM=$[$SUM+$i]
i=$[$i+1]
done
echo "SUM=$SUM"
(3)输出结果
[root@SHUYUAN shcode]# ./testwhile.sh 5
SUM=15
[root@SHUYUAN shcode]# ./testwhile.sh 10
SUM=55
[root@SHUYUAN shcode]# ./testwhile.sh 100
SUM=5050
示例2:使用while 求出三位数中的所有水仙花数。(每个位上的数字的三次幂之和等于它本身)
(1)创建sxh2.sh脚本
[root@SHUYUAN shcode]# vim sxh2.sh
(2)编辑内容
#!/bin/bash
i=100
echo "所有的水仙花数是: "
while [ $i -le 999 ]
do
a=$[$i%100%10]
b=$[$i%100/10]
c=$[$i/100]
s=$[$a*$a*$a+$b*$b*$b+$c*$c*$c]
if [ $s -eq $i ]
then
echo "$i"
fi
i=$[$i+1]
done
(3)结果输出
[root@SHUYUAN shcode]# chmod u+x sxh2.sh
[root@SHUYUAN shcode]# ./sxh2.sh
所有的水仙花数是:
153
370
371
407
五、read读取控制台输入
1、基本语法
read(选项)(参数)
(1)选项:
-p 制定读取值时的提示符
-t 指定读取值时等待的事件(S),如果没有在制定的时间内输入则不再等待
(2)参数:
变量:指定读取值的变量名
示例1:读取控制台输入一个NUM1值
示例2:读取控制台输入一个NUM2值,在10秒内输入
(1)创建testread.sh脚本
[root@SHUYUAN shcode]# vim testread.sh
(2)编辑内容
#!/bin/bash
#示例1:读取控制台输入一个NUM1值
read -p "请输入一个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
#示例2:读取控制台输入一个NUM2值,在10秒内输入
read -t 10 -p "请输入一个数NUM2=" NUM2
echo "你输入的NUM2=$NUM2"
(3)结果输出
[root@SHUYUAN shcode]# chmod u+x testread.sh
[root@SHUYUAN shcode]# ./testread.sh
请输入一个数NUM1=10
你输入的NUM1=10
请输入一个数NUM2=20
你输入的NUM2=20