数值测试:
-gt 是否大于
-ge 是否大于等于
-eq 是否等于
-ne 是否不等于
-lt 是否小于
-le 是否小于等于
unset 变量(删除脚本中临时用到的变量,较好的习惯)
在脚本中,使用{}将多条命令同时运行时,脚本最后需加wait,以结束等待回车环节,否则需手动回车
eval 是先扫描后续内容并替换变量,然后在使用,可解决echo {1..$n} 不打印数列的问题
条件选择语句if:
if 判断条件1; then
条件为真的分支代码
elif 判断条件2; then
条件为真的分支代码
elif 判断条件3; then
条件为真的分支代码
else
以上条件都为假的分支代码
fi
条件判断语句case:
case 变量引用 in (注意:变量引用是用$加变量名)
PAT1)
分支1
;;
PAT2)
分支2
;;
…
*)
默认分支
;;
esac
case支持通配符写法
循环语句:
for:
for 变量名 in 列表;do
循环体
done
for的另一种c语言格式运用:
for ((控制变量初始化;条件判断表达式;控制变量的修正表达式));do
循环体
done
while:
while CONDITION; do
循环体
done
命令为真时,开始循环体,直到命令为假
CONDITION:循环控制条件;进入循环之前,先做一次判断;每一次循环之后会再次做判断;条件为“true”,则执行一次循环;直到条件测试状态为“false”终止循环
until:
until CONDITION; do
循环体
done
命令为假时,才开始循环体,直到命令为真
shift:
将参数列表左移一个,后面接数字表示每次左移*个参数
while循环的特殊用法(遍历文件的每一行):
while read line; do
循环体
done < /PATH/FROM/SOMEFILE
依次读取/PATH/FROM/SOMEFILE文件中的每一行,且将行赋值给变量line
select:制作列表工具,一般搭配case形成可选列表
select 变量名 in list
do
循环体命令
done
trap:信号捕捉工具
trap ‘触发指令’ 信号
自定义信号所代表的的命令,当接受指定的信号时,执行前面的自定义指令
trap ‘-‘ 信号:恢复原信号的操作
trap -p:打印自定义信号操作内容
函数function是由若干条shell命令组成的语句块,实现代码重用和模块化编程
语法一:
f_name (){
…函数体…
}
语法二:
function f_name {
…函数体…
}
语法三:
function f_name () {
…函数体…
}
一般只用第一种格式即可
数组:
数组名和索引
索引:编号从0开始,属于数值索引
关联索引:索引可支持使用自定义的格式,而不仅是数值格式,bash4.0版本之后开始支持
稀疏索引:不连续的索引,中间缺少元素
声明数组:
declare -a ARRAY_NAME 普通数组,可以不声明即可使用
declare -A ARRAY_NAME: 关联数组,必须先声明,后使用
注意:两者不可相互转换
数组元素的赋值
(1) 一次只赋值一个元素
ARRAY_NAME[INDEX]=VALUE
weekdays[0]=”Sunday”
weekdays[4]=”Thursday”
(2) 一次赋值全部元素
ARRAY_NAME=(“VAL1” “VAL2” “VAL3″ …)
(3) 只赋值特定元素
ARRAY_NAME=([0]=”VAL1″ [3]=”VAL2” …)
(4) 对交互式数组值对赋值
read -a ARRAY
u显示所有数组:declare -a
引用数组元素:
${ARRAY_NAME[INDEX]}
注意:省略[INDEX]表示引用下标为0的元素
引用数组所有元素:
${ARRAY_NAME[*]}
${ARRAY_NAME[@]}
数组的长度(数组中元素的个数):
${#ARRAY_NAME[*]}
${#ARRAY_NAME[@]}
删除数组中的某元素:导致稀疏格式
unset ARRAY[INDEX]
删除整个数组:
unset ARRAY
向数组中追加元素:
ARRAY[${#ARRAY[*]}]=value
${#var}:返回字符串变量var的长度
${var:n}:返回字符串变量var中从第n个字符后的字符开始,到最后(简称偏移量)
${var:n:m} :跳过n个取接下来的m个字符
${var: -n}:取倒数n个字符(-n前面有一个空格)
${var:n:-m}:去掉前n个,去掉后m个,剩下的
${var: -n:-m}:先取后n个 ,再从结果中取后m个(-n前面有空格)(centos6不支持)
${var#*word}:其中word可以是指定的任意字符,var变量是储存字符串变量,这句的功能是当第一次发现关键字时,删除前面的,包括关键字,然后留下后面的(懒惰模式)
${var##*word}:同上,但是出于贪婪模式的搜索关键字
${var%word*}:逻辑同上,但是是从后向前开始搜索,并且删除关键字之后的字符串
${var%%word*}:逻辑同上,贪婪模式
查找替换
${var/pattern/substr}:查找var所表示的字符串中,第一次被pattern所匹配到的字符串,以substr替换之
${var//pattern/substr}: 查找var所表示的字符串中,所有能被pattern所匹配到的字符串,以substr替换之
${var/#pattern/substr}:查找var所表示的字符串中,行首被pattern所匹配到的字符串,以substr替换之
${var/%pattern/substr}:查找var所表示的字符串中,行尾被pattern所匹配到的字符串,以substr替换之
查找并删除
${var/pattern}:删除var所表示的字符串中第一次被pattern所匹配到的字符串
${var//pattern}:删除var所表示的字符串中所有被pattern所匹配到的字符串
${var/#pattern}:删除var所表示的字符串中所有以pattern为行首所匹配到的字符串
${var/%pattern}:删除var所表示的字符串中所有以pattern为行尾所匹配到的字符串
字符大小写转换
${var^^}:把var中的所有小写字母转换为大写
${var,,}:把var中的所有大写字母转换为小写(俩逗号)
变量赋值:
declare [选项] 变量名
-r 声明或显示只读变量
-i 将变量定义为整型数
-a 将变量定义为数组
-A 将变量定义为关联数组
-f 显示已定义的所有函数名及其内容
-F 仅显示已定义的所有函数名
-x 声明或显示环境变量和函数
-l 声明变量为小写字母 declare –l var=UPPER
-u 声明变量为大写字母 declare –u var=lower
间接变量引用
bash Shell提供了两种格式实现间接变量引用,从而显示var1所表示的真实变量内容
eval tempvar=\$$variable1
tempvar=${!variable1}
创建临时文件:
mktemp [OPTION]… [TEMPLATE]
TEMPLATE: filenameXXX
X至少要出现三个
OPTION:
-d: 创建临时目录
-p DIR或–tmpdir=DIR:指明临时文件所存放目录位置
install命令:
选项:
-m MODE,默认755
-o OWNER
-g GROUP
示例:
install -m 700 -o wang -g admins source directory
install –m 770 –d /testdir/installdir (创建文件夹)
expect命令/语言(使用前确保已安装)
选项
Ø-c:从命令行执行expect脚本,默认expect是交互地执行的
示例:expect -c ‘expect “\n” {send “pressed enter\n”}
Ø-d:可以输出输出调试信息
示例:expect -d ssh.exp
uexpect中相关命令
Øspawn:启动新的进程
Øsend:用于向进程发送字符串
Øexpect:从进程接收字符串
Øinteract:允许用户交互
Øexp_continue 匹配多个字符串在执行动作后加此命令
示例:实现scp中使用expect实现自动化
示例:在自动化的同时实现继续使用交互式操作,而非自动退出
示例:实现变量引用手动输入,并相似$1、$2….
bash –version 查看bash版本号
函数优先级大于别名
declare -f 查看所有被定义的函数
export -f 或declare -xf 查看所有全局变量
unset f_name 删除定义的某函数
return 在函数中使用,可中途退出函数,但不会退出脚本
kill -l 查看所有信号所代表的的原本命令(trap -l)
continue 停止执行当前循环(后面可接数字表示提前结束该层)
break 停止执行循环体(可接数字,同上)
bash -x test_continue.sh 跟踪后面的脚本,查看后台执行的步骤
true或:都可以使得echo $?为0;fault则默认为1
函数内部定义变量时,是同父进程同级的关系,要想只在函数内生效,只需在定义前加local即可:fun () { local name=mage;echo “$name” }
export name全局变量,影响当前shell环境并可传给子shell,不加export是局部变量,只影响当前shell,local name则只影响函数内的shell环境,影响最小(函数内部用declare -i等同于local)declare -ig 其中g则会把其定义变为局部变量
export -f function1可以把该定于函数变成全局变量的命令
修改ssh的配置文件:/etc/ssh/sshd_config 中的若有#usedns no,则把#删除即可
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/98404