Linux shell脚本——变量、条件和循环语句

活到老,学到老,记下来就不会忘记了

01 条件测试

1 条件判别表达式:真——0,假——1

2 整数判别符:-eq——等于,-gt——大于,-lt——小于,-ne——不等于,-le——小于等于,-ge——大于等于

3 条件测试命令:test或[ ] 测试条件

lihoon@lihoon:~$ val=97									<<==定义变量val=97
lihoon@lihoon:~$ test $val -gt 63				<<==用test命令比较变量是否>63
lihoon@lihoon:~$ echo $?							<<==查询上一次命令执行结果
0					<<==结果为真

lihoon@lihoon:~$ [ $val -gt 100 ] 				<<==[ ]命令比较变量是否>63(注意空格)
lihoon@lihoon:~$ echo $?
1					<<==结果为假

4 测试是否存在名称为temp的目录:[ -d temp ]

lihoon@lihoon:~/code/Linux_shell$ ls
command.sh  sample.sh      Shell笔记2.md  temp.sh
note.txt    shell笔记1.md  temp           temp.txt
lihoon@lihoon:~/code/Linux_shell$ [ -d temp ]
lihoon@lihoon:~/code/Linux_shell$ echo $?
0

5 测试是否存在名称为temp.txt的文件:[ -f temp.txt ]

lihoon@lihoon:~/code/Linux_shell$ ls
command.sh  sample.sh      Shell笔记2.md  temp.sh
note.txt    shell笔记1.md  temp           temp.txt

lihoon@lihoon:~/code/Linux_shell$ [ -f temp.txt ]
lihoon@lihoon:~/code/Linux_shell$ echo $?
0

other: -p——管道,-l——软连接,-c——字符设备,-b——块设备,-s——socket

6 测试字符串的长度是否为0:

​ [ -z string ]——长度为0则为真

​ [ -n string ]——长度非0则为真

lihoon@lihoon:~/code/Linux_shell$ var='hello'
lihoon@lihoon:~/code/Linux_shell$ [ -z $var ]
lihoon@lihoon:~/code/Linux_shell$ echo $?
1

lihoon@lihoon:~/code/Linux_shell$ [ -n $var ]
lihoon@lihoon:~/code/Linux_shell$ echo $?
0

7 比较两个字符串是否为真:[ string1 = string2 ]

lihoon@lihoon:~/code/Linux_shell$ var='hello'
lihoon@lihoon:~/code/Linux_shell$ [ $var = 'hello' ]
lihoon@lihoon:~/code/Linux_shell$ echo $?
0

lihoon@lihoon:~/code/Linux_shell$ [ $var != 'hello' ]
lihoon@lihoon:~/code/Linux_shell$ echo $?
1

8 逻辑与、或、非:-a、-o、!

lihoon@lihoon:~/code/Linux_shell$ [ -d temppp -a "$var" = '10' ]		<<==判断temppp目录是否存在并且变量值等于10
lihoon@lihoon:~/code/Linux_shell$ echo $?
1

02 条件分支

9 if语句

创建command.sh文件:vi command.sh

#! /bin/bash
date
echo "打印完时间,表示已经执行了command.sh文件了。"

echo "调用ls指令,查看目录下内容。"
ls

echo "调用pwd指令,查看当前工作目录:"
pwd
lihoon@lihoon:~/code/Linux_shell$ ls
command.sh  sample.sh      Shell笔记2.md  temp.sh
note.txt    shell笔记1.md  temp           temp.txt
lihoon@lihoon:~/code/Linux_shell$ vi command.sh 							<<==创建文件,输入上述内容
lihoon@lihoon:~/code/Linux_shell$ if [ -f command.sh ]; then		<<==if判断语句
> source command.sh 					<<==执行command.sh文件
> fi															<<==if语句结尾
 2020年 08月 05日 星期三 23:44:48 CST
 打印完时间,表示已经执行了command.sh文件了。
 调用ls指令,查看目录下内容。
 command.sh  sample.sh      Shell笔记2.md  temp.sh
 note.txt    shell笔记1.md  temp           temp.txt
 调用pwd指令,查看当前工作目录:
 /home/lihoon/code/Linux_shell 

10 case语句

创建f.sh文件,内容如下:

#! /bin/sh
echo "Is it morning? Please answer yes or no:"
read Yes_or_no			<<==读取输入值

case "$Yes_or_no" in
        yes|y|Yes|YES)					<<==变量值满足这4类条件之一时执行下一行(	|表示或)
                echo "Good morning.";;
        [n|no|N|NO|No]*)			<<==变量值满足这5类条件之一时执行下一行
                echo "Good afternoon.";;
        *)											<<==其他情况,类似于C++中的default
                echo "Sorry, I can't understand."
                return 1;;
        esac									<<==case结束符

在终端运行f.sh文件

lihoon@lihoon:~/code/Linux_shell$ source f.sh 				(注意:需要使用chmod指令修改文件权限为7xx)
Is it morning? Please answer yes or no:
y
Good morning.

03 循环语句

11 for循环:for/do/done

创建for.sh文件,写入如下内容:

#! /bin/sh

for FRUIT in apple banana peer; do
        echo "I like "$FRUIT.""
done

在终端运行for.sh文件

lihoon@lihoon:~/code/Linux_shell$ ./for.sh 
I like apple.
I like banana.
I like peer.

12 whie循环

创建while.sh文件,写入如下内容,用于测试输入密码

#! /bin/sh

echo "Please enter password:"

# 用于统计输入次数
CONTOUR=1

#读取输入的密码值
read PASSWORD

while [ "$PASSWORD" != "lihoon123" -a $CONTOUR -lt 3 ]; do
        echo "Error, try again:"
        read PASSWORD
        CONTOUR=$(($CONTOUR+1))

done

# while执行完成后,判断密码是否正确
if [ "$PASSWORD" = "lihoon123" ];then
        echo "############################"
        echo "Welcom to ubuntu for lihoon."
        echo "############################"
else
        echo "You are not the owner."
fi

在终端执行文件(前提是修改文件权限为可执行权限):

lihoon@lihoon:~/code/Linux_shell$ ./while.sh 
Please enter password:
lihoon
Error, try again:
lihoon123
############################
Welcom to ubuntu for lihoon.
############################

lihoon@lihoon:~/code/Linux_shell$ ./while.sh 
Please enter password:
lihoon
Error, try again:
lihoon
Error, try again:
lihoon
You are not the owner.

13 break和continue

break[n]——指定跳出几层循环;

continue——跳过本次循环,但是不跳出循环;

天下没有免费的午餐,要得来还需费工夫

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值