Shell脚本编程

Shell脚本变量

:这是把hostname暂时存放在CMD中通过echo能反馈出$CMD中又hostname得命令然后直接$CMD等于直接执行hostname,$在这等于变量,变量就是暂时变换成存放在CMD值中
:这得NAME=zhang而执行变量是却错了,变量中只能存命令才能执行。

在变量得时候不能加空格,多个内容得加“”来包括引用。而且在等号前后不能加空格,不然无法执行。
:变量也可以存放文件内容,但是必须使用反向单引号 `因为看文件其实是执行了一条命令所有得使用 `把要执行得让他当成是一条命令,所以才能显示。而双引号能识别变量中得命令。
变量不能跨终端窗口,只能在当前shell的窗口中。

:查看上一级的进程编号
查看进程的进程编号。

:删除变量。适用于环境变量和普通变量都适用。

export(英译:出口)
export NAME=环境变量,定义过了变量就不用再重新定义变量了。
在新的子进程中也能显示上以进程的变量值,因为使用了export就能一直传承,即使在开一个子进程。
:这段意思是,把环境变量换成马哥然后再开一个子bash进程所以子进程也是马哥,但是又开了一个wang的变量,所以这就不用再输入export子进程也可以是wang,(只要出现过一次export下面换变量就不用在输入export即可一直传承下去)。在当前bash变量中可以自己改自己的变量。
:在子进程中能够自己修改变量值这是修改了成了mage,但是在上一个shell中的变量还是原来那个zhang。
子进程修改了也是按照子进程的变量值往下传,环境变量秩序

:可以查看系统中得所有环境变量。

:删除当前bash的环境变量,但是在上一级bash也有环境变量,只能删除子进程和子进程以下的环境变量,不能去干扰父进程的变量。

环境变量可以改,但是只能从上往下传不能从下往回传。

表示shell的嵌入深度。
这个下划线表示记录了上一条命令的最后参数。

:只读文件只能看,不能修改和删除。虽然不能销毁和修改,但是退出当前shell便不见了。
:这个命令显示所有常量。

$* 传递给脚本的所有参数,全部参数合为一个字符串,所以在farther.sh我写入 a b c而这时候把所有的参数传给son.sh时由于有($1, $2, ... 对应第1、第2等参数,shift [n]换位置),这表示在son.sh中与$1所以就是和$1相同。所以son.sh也是abc

这我把farthet.sh中加入了$@然后传给送而$@是$@ 传递给脚本的所有参数,每个参数为独立字符串所以a在$@中也是独立的字符 ,以为是独立的字符串所以在con中仅显示独立的a

:一个脚本的创建,
COLOR=“\033[1;31m”这是把颜色常量放在COLOR这个变量中
WJ=/tmp/data +%F_%T这是把需要创建的文件放在WJ这个变量中
Mkdir 加$WJ这是将变量的WJ生成一个文件然后在用mv $ $WJ将所有$(所有东西)移动到WJ$变量文件中。

失败原因有多种方式可能是命令错误等等。。。$?检查出来是零就代表成功,是1-255就代表错误,而在脚本中最后一个命令是对的这检测出来也是0,检查脚本只看最后一个命令。

exit后面加自己想写的值,用$?检测出来也是后面所跟的值。

          Shell算术运算

:这的x,y因为已经变量x+10,y+20所以相加z=30,let等于算术表达式。
:也可以加变量进去进行计算。
:也可以用两个小括号。
:expr直接就是一个命令计算用的,而这不能直接带,不然系统会默认以为这是一个通配符,所以得转义\
:declare -i后面加想变量得字符,然后用这个字符然后=数字相加载用echo $n变量显示。

这是i=10 第一个加号就是代表加的意思,后面一个+号等于1所以10=1等于11等于((i++))括号这是计算方式。
:这x=10 let计算x+=3,然后用echo查看在10的基础上加3等于13 后来用在x+=5在13的基础上又加5等于18。一次类推,但是减的时候只能在最后的值减。

第一题答案:
原理UID20等于取第20个用户的UID head -20显示/etc/passwd的前二十行tail -1最后一行等于说是第二十个用户的行,UID10也是同理,然后两个相加就是两个用户的UID总和。

第三题答案:
。:先创建一个sumfile.sh的脚本然后在里面变量NO1,NO2,NO3。然后在给他们加权限相加他们的总和。


0假 ,1真

与:任何数和0相与,结果为0,任何数和1相与,保留原值
0与0=0
0与1=0
1与0=0
1与1=1

或:任何数有1,结果为1,两个数都为0,结果为才0
0或0=0
0或1=1
1或0=1
1或1=1

12与8=8

1100
1000
1000
12或8=12
1100
1000
1100
假与真=假
假与假=假
CMD1 && CMD2
短路与:如果与前的CMD1执行是假,总结果就假,没有必要执行与后操作CMD2
如果CMD1成功了,就可执行CMD2
如果CMD1失败了,就不执行CMD2

真或真=真
真或假=真
假或真=真
假或假=假
CMD1 || CMD2
短路或:如果与前的CMD1执行是假,那就执行CMD2判断是否为真
如果CMD1成功(真)了,就不执行CMD2
如果CMD1失败(假)了,就可执行CMD2
异或:
0^0 = 假0
1^0 = 真1
异或:^
异或的两个值,相同为假,不同为真
12^8=4

1100
1000
0100

0100 4
1100 12
1000 8

0100 4
1000 8

1100 12

要组合也是先与后或,不能先或后与y

:组合不能先短路或,不然就如上图所示,会产生逻辑上得混乱。

:对变量进行判断的时候记得加双引号,不加会出现误判的结果。test和[ ]的判断事一样的也可以这样写。

:这x等于20,y等于10所以x比y大
[ $x -gt $y ],最后判断是真的正确的所以为0而x比Y小[ $x -lt $y ]是错误的所以判断出来为假为1。

:因为这BLK是用的正则表达式,所以下面必须得加双中括号。不然无法执行。
:这=~是grep得意思正则表达式. 这得点转义加sh$结尾得文件如果成立则是真就显示is ascript,命令意思是如果文件是脚本这就显示是脚本。只要是变量建议加双引号。

:再写通配符得时候ab*就不用加引号而且==是通配符得意思。只要是变量建议加双引号。

[ [ ] ](双中括号)的 特点
支持正则表达式和通配符
== != 符号右侧可使用通配符,左侧变量名建议加“”
=~ 符号右侧可使用正则表达式,左侧变量名建议加“”

小括号会开启子进程小括号也继承shell而大括号则不开启子进程。

:变量赋值和内置变量只影响小括号里得操作,括号结束之后不影响括号外得操作。所以第一个显示得是zhang第二个是zgy但是括号结束后不影响括号外的操作所有又恢复成了zhang
:小括号会开启子进程小括号也继承shell而大括号则不开启子进程。

双中括号只能用在正则表达式上。单中括号不支持正则表达式。
第一题答案:

第2题答案:

第3题答案:

第5题答案:

Read了一堆变量赋值。
:-p是指定要显示的提示。而这AGE是这段话得变量
:-n 加数字等于指定字符长度,超过了就结束。
-d后面加字符,可以一直输入,当输入到那个字符时就退出。这是只要不输入x就可以一直输入,当输入遇见X就退出

:read可以对多个变量批量赋值

If这个是关键字必须德和其他关键字组合起来用。通过别的命令组合起来才能使用

If语句用法::这是写出自己得分数,命令意思:先用read -p 列出自己得题目这是read -p “请输入你的分数” P最后面这个大写得P是“请输入你的分数”变量得意思 if [[ $P =~ ^[0-9]+$ ]];then这个地方由于是正则表达式所有必须用双中括号,再用!反馈输入得是否为数字,$P必须是数字所以^[0-9]+$以数字开头再以数字结尾,如果不是输入得数字就提示“请输入你的得分”然后在进行第二个条件判断
如果这个不成立为假就用elif判断第二个条件是否为真第二个条件是如果输入得分数小于60就是“你是个失败者”结束
如果第二个条件也不成立就可以再用elif执行第三个条件,小于80就是”你及格了”
如果第三个条件也不成立在用elif执行第二个条件,小于或等于100就是“你真牛逼”
如果以上条件都是假分支就直接以else“连个垃圾都不如 ” f i结尾退出。
echo “请输入分数”

Case得语法与使用方法:
该命令意思:先用cat列出以下7个条件再用 read -p 列出问题名称在变量为C
Case $c in
1)条件一用echo 列出菜品和价格
再用;;两个分号隔开再去实行第二个条件。
2)依此类推
*)最后都没有得到想要的选项
echo“没有以上选项”
再以esac结尾
脚本里面还可以加脚本来选项。
/
第一题答案:
命令意思将你确定要创建新UID,read -p “dose th euser exist?”为U得变量
Id $U &>/etc/null不管有没有都给erc这个文件
在用!变量得反是否等于0如果等于就用&&短路与 uaeradd $U 在/etc/null这个文件新建一个用户,用echo显示创建成功。
如果变量值反是不等于0得也就是错误得则显示需要创建一个行用户。
第一题答案:
第二题答案:

命令意思先用read -p 显示yes or no然后在变量Y
再用正则表达式变量$Y取出y开头或者结尾用^$选项,如果对了就显示yes然后退出,NO也一样得做法。
第4题答案:

优先级执行次序: