最全shell脚本语句语法使⽤(超详细)
shell脚本的编写越规范越好,那么通常在每个shell脚本的开头⼏⾏会有如下⼏个⽅⾯相关的注释信息:
废话不多说,直接上使⽤语法案例:
1、对谈式脚本——read语句
需求①:
first name 与 2. last name,最后并且在屏幕上显⽰:“Your full name is: ”的内容:
[root@localhost ~]# vim 1.sh #编辑脚本,内容如下
#!/bin/bash
echo -e "yong lai xian shi wen jian full name:\n"
read -p "qing shu ru fir filename:" firname
read -p "qing shu ru sec filename:" secname
echo -e "\nyour full name is ${firname}${secname}."
#其中echo后⾯的“\n”表⽰换⾏
[root@localhost ~]# sh 1.sh #执⾏脚本
yong lai xian shi wen jian full name:
qing shu ru fir filename:lv #⼿动输⼊⽂件名开头
qing shu ru sec filename:jian #⼿动输⼊⽂件名结尾
your full name is lvjian. #它将⾃动将开头和结尾结合起来并输出
需求②:
假设我想要创建三个空的⽂件(通过touch),filename最开头由当前⽤户输⼊决定,假设使⽤者输⼊ filename 好了,那今天的⽇期是2019/08/25 ,我想要以前天、昨天、今天的⽇期来创建这些⽂件。
[root@localhost ~]# vim 2.sh #编辑脚本
#!/bin/bash
echo -e "yi ci chuang jian san ge file.\n"
read -p "qing shu ru filename:" filename
filename=${filename:-file}
date1=$(date --date '1 days ago' +%Y%m%d)
shell最简单脚本date2=$(date --date '2 days ago' +%Y%m%d)
date3=$(date +%Y%m%d)
file1="${filename}${date1}"
file2="${filename}${date2}"
file3="${filename}${date3}"
touch "${file1}"
touch "${file2}"
touch "${file3}"
[root@localhost ~]# sh 2.sh #执⾏脚本
yi ci chuang jian san ge file.
qing shu ru filename:lv #输⼊⾃定义的⽂件名开头
[root@localhost ~]# find /root -name "lv*" #查看是否创建成功
/root/lv20190825
/root/lv20190827
/root/lv20190826
需求②:
如果我们要使⽤者输⼊两个变量,然后将两个变量的内容相乘,最后输出相乘的结果。
[root@localhost ~]# vim 3.sh #编辑脚本
#!/bin/bash
echo -e "\nzhe shi yi ge suan cheng fa de jiao ben:\n"
read -p "qing shu ru yi ge shu zi:" A
read -p "qing shu ru di er ge shu zi:" B
sum=`echo "scale=4; ${A} * ${B}" | bc`
echo -e "\n${A}x${B} ==> ${sum}."
[root@localhost ~]# sh 3.sh #执⾏脚本
zhe shi yi ge suan cheng fa de jiao ben:
qing shu ru yi ge shu zi:3 #输⼊第⼀个数
qing shu ru di er ge shu zi:4 #输⼊第⼆个数
3x4 ==> 12. #输出的结果
2、shell脚本中的测试的字符
上⾯所有的测试都是通过test进⾏的,可以使⽤“[ ]”来代替,将要测试的类型及指定的名字写在“[ ]” 即可,但是中括号⾥⾯两边必须有空格。(推荐使⽤中括号“[ ]”)
3、判断脚本举例
需求①:
1. 这个⽂件是否存在,若不存在则给予⼀个“Filename does not exist”的讯息,并中断程序;
2. 若这个⽂件存在,则判断他是个⽂件或⽬录,结果输出“Filename is regular file”或“Filename is directory”
3. 判断⼀下,执⾏者的⾝份对这个⽂件或⽬录所拥有的权限,并输出权限数据!
[root@localhost ~]# vim 4.sh #编辑脚本
#!/bin/bash
echo "yong lai ce shi wen jian huo dirctory."
read -p "qing shu ru yi ge wen jian ming:" filename
test -z ${filename} && echo -e "\nqing shu ru yi ge filename." && exit 0
test ! -e ${filename} && echo "filename does not exitst." && exit 0
test -f ${filename} && filetype="file"
test -d ${filename} && filetype="directory"
test -r ${filename} && prem="read"
test -w ${filename} && prem="${prem}+write"
test -x ${filename} && prem="${prem}+exe"
echo -e "\nthis is a ${filetype},it's perm.. is ${prem}."
[root@localhost ~]# sh 4.sh #执⾏脚本
yong lai ce shi wen jian huo dirctory.
qing shu ru yi ge wen jian ming:/root #输⼊⼀个⽬录名
this is a directory,it's perm.. is read+write+exe. #脚本执⾏后输出的结果
[root@localhost ~]# sh 4.sh #再执⾏脚本
yong lai ce shi wen jian huo dirctory.
qing shu ru yi ge wen jian ming:/etc/passwd #输⼊⼀个⽂件
this is a file,it's perm.. is read+write. #脚本执⾏后输出的结果
需求②:
1、当执⾏⼀个程序的时候,这个程序会让⽤户输⼊Y或N。
2、如果使⽤者输⼊Y或y时,就会显⽰OK,continue.
3、如果使⽤者输⼊N或n时,就会显⽰ON,interrupt.
4、如果不是Y/y/N/n之内的字符,那么将会死循环这个脚本,直到⼿动退出,或输⼊正确的值(其实稍作改动,可以改为若默认按回车的话可以等于输⼊“Y”,⾃⾏研究吧)。
[root@localhost ~]# vim 5.sh #编辑脚本
#!/bin/bash
while [ "${yn}" != "Y" -o "${yn}" != "y" -o "${yn}" != "N" -o "${yn}" != "n" ]
do
read -p "qing shu ru 'Y' or 'N':" yn
[ "${yn}" == "Y" -o "${yn}" == "y" -o "${yn}" == "" ] && echo -e "\nOK,continue." && exit 0
[ "${yn}" == "N" -o "${yn}" == "n" ] && echo -e "\nON,interrupt." && exit 0
done
[root@localhost ~]# sh 5.sh #下⾯是多次执⾏脚本,测试是否达到需求
qing shu ru 'Y' or 'N':
OK,continue.
[root@localhost ~]# sh 5.sh
qing shu ru 'Y' or 'N':y
OK,continue.
[root@localhost ~]# sh 5.sh
qing shu ru 'Y' or 'N':n
ON,interrupt.
[root@localhost ~]# sh 5.sh
qing shu ru 'Y' or 'N':u
qing shu ru 'Y' or 'N':i
qing shu ru 'Y' or 'N':N
ON,interrupt.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论