建设网站天河区,做网站公司yuanmus,上海市建设市场信息服务平台,网站开发 技术架构文章目录 一、Shell基本语法文件名代换命令代换算术代换转义字符引号 二、Shell脚本语法条件测试分支结构循环 三、总结 一、Shell基本语法
文件名代换
用于匹配的字符称为通配符#xff08;Wildcard#xff09;#xff0c;如#xff1a;* ? [ ] 具体如下#xff1a; *… 文章目录 一、Shell基本语法文件名代换命令代换算术代换转义字符引号 二、Shell脚本语法条件测试分支结构循环 三、总结 一、Shell基本语法
文件名代换
用于匹配的字符称为通配符Wildcard如* ? [ ] 具体如下 * 匹配0个或多个任意字符 ?匹配一个任意字符 [ ]匹配方括号中任意一个字符的一次出现 代换成功的前提是文件必须存在如果文件不存在则带换不了。
参数扩展 touch {1, 2, 3, 4} / touch{1..4}.txt 命令代换
执行某一条命令将这个命令的标准输出的内容存到某个变量中。 varnamecmd arg1 arg2 ... varname$(date) #!/bin/bash
DateTimedate
echo DateTime is $DateTime 获取当前脚本所在路径
#获取当前脚本所在路径 ,在这个路径touch一个1.txt
curPath$(cd dirname $0;pwd)
touch $curPath/1.txt算术代换
做最基本的整数运算
var45
var22
echo $[var3]
echo $((var3))
echo $((var*var2))
echo $(($var*$var2))
# 将10以八进制来解析最后得到的是10进制的8最后再加11等于19
echo $[8#1011]转义字符
和C语言类似\在Shell中被用作转义字符用于去除紧跟其后的单个字符的特殊意义回车除外换句话说紧跟其后的字符取字面值。例如 引号
单引号
和C语言不同Shell脚本中的单引号和双引号都是字符串的界定符而不是字符的界定符。单引号用于保持引号内所有字符的字面值即使引号内的\和回车也不例外但是字符串中不能出现单引号。如果引号没有配对就输入回车Shell会给出续行提示符要求用户把引号配上对。例如 双引号
被双引号括住的内容将被视为单一字串。它防止通配符扩展但允许变量扩展。这点与单引号的处理方式不同。 当我们使用变量之前如果变量是作为一个参数来传递的应该习惯性的加双引号防止变量中有空格。 二、Shell脚本语法
条件测试
shell中如何表示真假直接使用某条命令的返回状态来判断真假——main函数的返回值 。我们知道在main函数中0表示正常返回非0表示非正常返回。跟C语言是相反的。
我们可以通过$?来获取上一条命令的返回状态。 条件测试的命令 test 表达式 / [ 表达式 ] ( EXPRESSION ) 测试该表达式是否为真! EXPRESSION 取反EXPRESSION1 -a EXPRESSION2 逻辑与EXPRESSION1 -o EXPRESSION2 逻辑或-n STRING 判断字符串不是空串-z STRING 判断字符串长度为0STRING1 STRING2 判断字符串相等STRING1 ! STRING2 判断字符串不等INTEGER1 -eq INTEGER2 判断整数相等INTEGER1 -ge INTEGER2 判断整数1整数2INTEGER1 -gt INTEGER2 判断整数1整数2INTEGER1 -le INTEGER2 判断整数1整数2INTEGER1 -lt INTEGER2 判断整数1整数2INTEGER1 -ne INTEGER2 判断整数1!整数2FILE1 -nt FILE2 判断文件1比文件2新指最后修改时间FILE1 -ot FILE2 判断文件1比文件2旧-b FILE 块设备-c FILE 字符设备-d FILE 判断是否目录-e FILE 单纯判断文件是否存在-f FILE 判断文件是一个普通文件-h FILE / -L FILE 判断是否一个符号链接-k FILE 判断文件的粘着位是否被设置-p FILE 判断文件是否是一个命名管道-r FILE 判断文件是否有读权限-s FILE 判断文件存在并且大小大于0字节-S FILE 判断文件是否是一个socket文件-t FD 判断某个文件描述符被终端打开-w FILE 判断是否有写权限-x FILE 有执行权限 分支结构
和C语言类似在Shell中用if、then、elif、else、fi这几条命令实现分支控制。
#!/bin/bash
if [ -f /bin/bash ] # 判断bash文件是不是一个普通文件
then echo /bin/bash is a file
else echo /bin/bash is NOT a file
fi“:”是一个特殊的命令称为空命令该命令不做任何事但Exit Status总是真。
#!/bin/bash
if false
then:
elseecho always false
fi#!/bin/bash
echo Is it morning? Please answer yes or no!
#读取用户输入的一个变量
read YES_OR_NO
if [ $YES_OR_NO yes ]
thenecho Good morning
elif [ $YES_OR_NO no ] ; thenecho Good afternoon
elseecho Not recognized:
fi除此之外Shell还提供了和||语法和C语言类似具有Short-circuit特性。
分支结构
case 表达式 in
val1|pattern1)xxxxxx;;
val2|pattern2)xxxxxx;;
*)xxxx;;
esac #将case倒着写#!/bin/bash
echo Is it morning? Please answer yes or no!
#读取用户输入的一个变量
read YES_OR_NOcase $YES_OR_NO in
yes|y|Yes|YES)echo Good morning;;
[nN][oO])echo Good afternoon;;
*)echo Not recognized;;
esac循环
for循环的遍历方式
for varname in 列表 ; do #do可以单独写一行如果写在for这一样就要分号.....echo $varname
done控制循环次数
for i in {1..100}
do...
done遍历目录
for i in ls
do....
donefor FRUIT in apple banana pear
do echo I like $FRUIT
done# 计算从1加到100的值使用for循环
sum0
for i in {1..100}
do sum$[$sum$i]
done
echo $sum# 遍历当前目录看当前目录中的普通文件和目录
for f in ls
do if [ -f $f ]thenecho $f 是一个文件elif [ -d $f ]then echo $f 是一个目录else echo Not recognizedfi
donewhile循环的遍历方式
while 命令|条件测试
doxxxx
donebreak 和 continue 跟C中的一样echo Please input paswd
sum1
read try
while [ $try ! secret ]
do if [ $sum -ge 5 ]then echoError 5 times, exitbreakfi echo Sorry, try again!read try sum$[$sum1]
done三、总结
Shell就是命令行工具的胶水没有任何语言能像Shell一样方便地将一大堆命令行工具组合起来。原则上来说Shell做什么都可以但显然它最适合的是自动化因为只需要将你原来手动敲的命令都复制到一个文件里面就行了。好了我们下期见