Shell编程自学笔记(二)——运算符+条件判断+单多分支+流程控制+read获取输入

本文详细介绍了Linux中的基本运算符用法、条件判断结构,包括算术运算、字符串比较、文件判断,以及单分支、多分支和case、for、while循环的实例。通过操作演示,新手也能轻松理解并实践Linux命令行技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考网址为:【小白入门 通俗易懂】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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值