活到老,学到老,记下来就不会忘记了
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——跳过本次循环,但是不跳出循环;
天下没有免费的午餐,要得来还需费工夫