Linux学习笔记.day4

shell脚本学习

学习来源:《Linux就该这么学》

一、shell结构

第一部分.脚本声明:利用什么解释器运行 - #!/bin/bash
第二部分.脚本注释:描述脚本功能 - 以#号开头,可多行
第三部分.执行语句:需要执行的语句 - linux命令

shell.sh

#!/bin/bash     脚本声明
# For Example BY linuxprobe.com  脚本注释
pwd      执行命令
ls -al   执行命令

二、参数接收

1.接收命令行参数

$0对应的是当前Shell脚本程序的名称
$#对应的是总共有几个参数
$*对应的是所有位置的参数值
$?对应的是显示上一次命令的执行返回值
$1、$2、$3……则分别对应着第N个位置的参数值

$vim example.sh
#!/bin/bash
echo "当前脚本名称为$0"
echo "总共有$#个参数,分别是$*。"
echo "第1个参数为$1,第5个为$5。"
$bash example.sh one two three four five six
当前脚本名称为example.sh
总共有6个参数,分别是one two three four five six。
第1个参数为one,第5个为five。

2.接收用户输入-read

参数:
-t : 设置输入超时时间
-p: 设置输入时提示

$vim linuxread.sh
#!/bin/sh
#It's read.
read -t 5 -p "input :" name
echo "输入的名字是:$name。"
$bash linuxread.sh
input :basd
输入的名字是:basd。

三、测试语句

利用中括号包裹测试语句,返回逻辑值到$?,格式 : [ 测试语句 ]
按类型分为:

文件测试语句
逻辑测试语句
整数值比较语句
字符串比较语句

1.文件测试

-d 测试文件是否为目录类型
-e 测试文件是否存在
-f 判断是否为一般文件
-r 测试当前用户是否有权限读取
-w 测试当前用户是否有权限写入
-x 测试当前用户是否有权限执行

$[ -d /etc/fstab ]
$echo $?
1
$[ -e /etc/fstab ]
$echo $?
0

2.逻辑测试

&&是逻辑“与”,只有当前面的语句执行成功的时候才会执行后面的语句。
||是逻辑“或”,只有当前面的语句执行失败的时候才会执行后面的语句。
!是逻辑“非”,代表对逻辑测试结果取反值;之前若为正确则变成错误,若为错误则变成正确。

$[ -d /etc/fstab ] && echo "yes" || echo "no"
no
$[ -e /etc/fstab ] && echo "yes" || echo "no"
yes
$[ ! -e /etc/fstab ] && echo "yes" || echo "no"
no

3.数值比较

操作符作用
-eq等于
-ne不等于
-gt大于
-lt小于
-ge大于等于
-le小于等于
$[ 10 -eq 10 ]  # 等于
$echo $?
0
$[ 10 -gt 10 ]  # 大于
$echo $?
1
$[ 10 -ge 10 ]  # 大于等于
$echo $?
0

4.字符串比较

= 比较字符串内容是否相同
!= 比较字符串内容是否不同
-z 判断字符串内容是否为空

# 第一位上的$是linux命令交互的提示符
$string=''
$[ -z string ]
$echo $?
0
$string='string'
$[ $string = string ]
$echo $?
0
$[ $string = str ]
$echo $?
1
$[ $string != string ]
$echo $?
1
$[ $string != strin ]
$echo $?
0

四、流程控制

1.if条件分支

if条件语句的单分支结构由if、then、fi关键词组成,而且只在条件成立后才执行预设的命令,相当于口语的“如果……那么……”。

# 单分支
$vim pingfen.sh
#!/bin/bash
score=$1
if [ $score -ge 60 ]
then
	echo '及格'
else
	echo '不及格'
fi
$./pingfen 59
不及格
---------------------------------------
#多分支
$vim pingfen.sh
#!/bin/bash
score=$1
if [ $score -lt 0 ] || [ $score -gt 100 ]
then
        echo '分数不合理'
elif [ $score -ge 90 ]
then
        echo '优秀'
elif [ $score -ge 75 ]
then
        echo '良'
elif [ $score -lt 60 ]
then
        echo '不及格'
else
        echo '及格'
fi

$./pingfen.sh -10
分数不合理
$./pingfen.sh 59
不及格
$./pingfen.sh 100
优秀
$./pingfen.sh 540
分数不合理

2.case条件分支

case 语句和 if…elif…else 语句一样都是多分支条件语句,不过和多分支 if 条件语句不同的是,case 语句只能判断一种条件关系,而 if 语句可以判断多种条件关系。

$vim testcase.sh
#!/bin/bash
case $1 in 
"yes")
	echo "o! yes!"
	;;
"no")
	echo "o! no!"
	;;
*)
	echo "It's error!"
	;;
esac

$./testcase.sh yes
o! yes!
$./testcase.sh Yes
It's error!

3.for循环

for循环语句允许脚本一次性读取多个信息,然后逐一对信息进行操作处理。

$vim scorelist.txt
59
60
70
75
89
90
102
115
$vim pingfen.sh
#!/bin/bash
for score in `cat scorelist.txt`
do
	if [ $score -lt 0 ] || [ $score -gt 100 ]
	then
	        echo "$score 分数不合理"
	elif [ $score -ge 90 ]
	then
	        echo "$score 优秀"
	elif [ $score -ge 75 ]
	then
	        echo "$score 良"
	elif [ $score -lt 60 ]
	then
	        echo "$score 不及格"
	else
	        echo "$score 及格"
	fi
done
$./pingfen.sh
59 不及格
60 及格
70 及格
758990 优秀
102 分数不合理
115 分数不合理

4.while循环

while条件循环语句是一种让脚本根据某些条件来重复执行命令的语句,它的循环结构往往在执行前并不确定最终执行的次数,完全不同于for循环语句中有目标、有范围的使用场景。

$vim Guess.sh
#!/bin/bash
PRICE=$(expr $RANDOM % 1000)
echo "商品实际价格为0-999之间,猜猜看是多少?"
TIMES=1
read -p "请输入您猜测的价格数目:" INT
while  [ ! $INT -eq $PRICE ]
do
        let TIMES++
        if [ $INT -gt $PRICE ] ; then
                echo "太高了!"
        else
                echo "太低了!"
        fi
        read -p "请输入您猜测的价格数目:" INT
done
echo "恭喜您答对了,实际价格是 $PRICE"
echo "您总共猜测了 $TIMES 次"

$./Guess.sh
./Guess.sh 
商品实际价格为0-999之间,猜猜看是多少?
请输入您猜测的价格数目:500
太低了!
请输入您猜测的价格数目:750
太高了!
请输入您猜测的价格数目:600
太低了!
请输入您猜测的价格数目:650
太高了!
请输入您猜测的价格数目:625
太低了!
请输入您猜测的价格数目:635
太低了!
请输入您猜测的价格数目:642
太高了!
请输入您猜测的价格数目:639
太高了!
请输入您猜测的价格数目:636
太低了!
请输入您猜测的价格数目:637 
太低了!
请输入您猜测的价格数目:638
恭喜您答对了,实际价格是 638
您总共猜测了 11
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值