学习过windows脚本后,继续学习一下shell脚本的相关内容
运行
首先运行Shell脚本有两种方法
1.将其作为可执行程序
保存代码为.sh文件,并进入到文件所在目录
chmod +x ./test.sh #使其具备执行权限
./test.sh #执行
这里要注意的是,通常情况下./必不可少,因为并为将其配置在PATH中,使用./就是告诉系统文件在当前目录中
2.作为解释器参数
/bin/sh test.sh
直接运行相关解释器,文件名作为参数
变量
定义变量:
定义变量时,变量名与等号之间不能有空格,其余要求与通常语言一致
使用变量
使用一个已经定义过的变量时,只要在变量名前加‘$'符号即可,同时建议对变量名加上大括号{},便于识别
只读变量
定义变量后,为防止被更改,可通过命令(readonly)设定为只读
例如
myname = "lll"
readonly myname
删除变量
使用unset命令删除之前定义过的变量
字符串
单引号定义,引号中的变量无效,引号若再次出现单引号则被截断,即使使用转义符也不可。
双引号定义,可以有变量,可以使用转义字符
获取字符串长度
name = 'lll'
echo $(#name)
获取子字符串
echo ${name:1:2}
从字符串1个字符开始,长度为2
查找子字符串
echo `expr index "&name" o`
`是反引号,不是单引号,此符号位于tab键上方,功能是替换,把一个命令的标准输出插在 一个命令行的任何位置
这里另外补充几种判断是否包含子串方法
1.grep
strA="long"
strB="on"
result=$(echo $strA | grep "$strB")
if["$result" != ""]
then echo "IN"
fi
2.利用运算符
strA="long"
strB="on"
if [[$strA =~ $strB]]
then echo "IN"
fi
=~ 符号直接判断是否包含
3.利用通配符
strA="long"
strB="on"
if [[$strA =~ *$strB*]]
then echo "IN"
fi
数组
shell中限制数组只能为1维
括号表示数组,元素用空格分开
array=(val1 val2 val3)
读取数组
直接下标读取即可
获取数组长度
#两种方法
length=${#arrayname[@]}
length=${#arrayname[*]}
#获取单个元素长度
length=${#arrayname[0]}
大段注释
:<<EOF
内容
EOF