shell笔记3

标题shell脚本的编写

3.19
变量表达式
test是shell程序中的一个表达式,通常用在流程控制for,while,until,if等结构中,
用test命令去判断文件的存在与性质,变量的相互关系
语法:test<表达式>
如果<表达式>成立,test返回0,反之返回一个非零值
字符串比较
两个数值的比较
逻辑操作,可以进行an/or,与其他条件联合使用
文件操作,例如文件是否存在文件的状态等

字符串比较
-z<字符串>比较字符串的长度是否为0如果等于0则为是返回0
-n: 比较字符串的长度是否大于0,如果大于0则为是
<字符串1>=<字符串2>:比较两个字符串是否相同,相同为0,
(等号两边要有空格判断使用==)

str1=abcd
str2=abc
test s t r 1 = str1= str1=str2
echo $?

<字符串1> != <字符串2 >:比较两个字符串是否相同,不同则为是
数字比较
<数值表达式1><算符><数值表达式2>(算符两边要有空格)
-eq:两者相等 比较两个字符是否相同 相同为是(0)
-ne:两者不等 比较两个字符是否相同 不同为是 (1)
-it:前者小于后者 比较两个字符是否相同 不同为是(1)
-le:前者小于或等于后者 比较两个字符是否相同 相同为是(0)
-gt:前者大于后者 比较两个字符是否相同 不同为是(1)
-ge:前者大于或等于后者 比较两个字符是否相同 相同为是(0)

int1=1
int2=2
test $int1 -eq $int2
echo $?

文件操作
文件测试 表达式通常是为了测试文件的文件操作逻辑
-e:对象是否在,存在返回值为0
-d:对象存在且为目录,则返回值为0
-f:对象存在且为文件,则返回0
-L:对象存在且为符号连接,则返回值为0
-r:对象存在且可读
-s:对象存在且长度为非0则返回值为0
-w:对象存在且可写,则返回0
-x:对象存在且可执行,则返回0

!:测试条件的否定(与上述的符号用空格隔开)

test ! -e /home/111.c
echo $?

逻辑测试
常用于逻辑测试的<表达式>有:
!<表达式>: <表达式>不成立
<表达式1>-a<表达式2>: <表达式1>与<表达式2>同时成立

<表达式1>-o<表达式2>: <表达式1>或<表达式2>同时成立

shell流程控制语句
条件控制:if,case等结构
循环控制:for、¥while、until等结构
在shell中,条件判断语句可以使用if条件语句和case条件语句,(case语句的选项比较多)

if<判别命令>;
then{命令清单1}
then{命令清单2}
fi

此处判别命令通常是上述test<表达式>,如果只写表达式,则用中括号括起来(中括号两边要有空格)
如果<判别命令>返回0(对与test命令来说,就是其后表达式成立),则将执行then后的命令清单;
反之,则执行else后的命令。

shell语句中的分号
分号是多个语句之间的分隔符。当只有一个语句的时候,末尾无需分号。最后一个语句后面也无需分号、

eg
if[ abcdefg ];then

等于if [ abcdefg ]
then

if…
then…
else if …
then…
else…

fi
fi
fi

1,[],=,-o两边要有空格,=也可以用== (=作为赋值语句时不能写出==)
2,$ANSWER,N两边写不写引号无所谓
3case 条件语句用于在两个选项中选定一个选项,而case条件选择为用户提供了个根据字符串或变量的值,从多个选项中选择一项方法。

语法
case<变量>in
<字符串1>){<命令清单1>};;
。。。
<字符串n>){<命令清单n};;
*){其他命令}
esac

eg:
case $1 in
China) echo BeiJing;;
USA) echo Washington;;
British) echo London;;
Russia) echo Moscow;;
*) echo Out of my knowledge;;
esac

eg
假如给出月份数字作为参数,就能编写一个回送月份名的脚本month,当所给出的数字不在1和12之间时,将得到出错信息。
#!/bin/bash
#filename:month

case $1 in
1|01) echo january;;
2|02) echo february;;
3|03) echo march;;
4|04) echo april;;
5|05) echo may;;
6|06) echo june;;
7|07) echo july;;
。。。。。。。
*) echo sorry;;
esac

eg 编写一个shell脚本cjpd,根据输入的学生判断等级,当成绩>=90时为A [80,90)为B, [70,80)为c,【60,70)为D
#!/bin/bash

echo “please input your score:”
read score

if test $score -ge 90
then num=1
else if test $score -ge 80
then num=2
else if test $score -ge 70
then num=3
else if test $score -ge 60
then num=4
else num=5
fi
fi
fi
fi

case $num in
1) echo “A”;;
2) echo “B”;;
3) echo “C”;;
4) echo “D”;;
*) echo “no grade”;;
esac

在这里插入图片描述

在case运算式中也可以用shell的通配符(“”,“?”,“【】”)
通常用“
”作为case命令的最后运算式,以便在前面找不到任何相应的匹配项式执行“”

eg:使用if-then-else语句创建一个根据输入分数判断分数是否及格的shell程序文件名为ak
在这里插入图片描述
1,for语句循环
for<循环变量>[in <循环变量的取值集>]
do<命令清单>
done
如果for语句的后半部分被省略,则默认的<循环变量取值集>就是命令行参数集
如果命令清单有多条命令,系统会依次执行

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

躺尸研究员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值