shell编程相关命令
shell相关:
bash命令:
bash -c "str" 将字符串当做命令处理
bash -n 脚本 检查sh语法
bash -x 脚本 执行并输出执行过程,用来调试
shell运行方式:
(ls ;pwd) 开启一个子bash执行
{ ls;pwd; } 在当前bash执行
{ 命令 }& 加"&"符并行执行,大幅度提高运行效率
declare命令:
作用: 声明变量
declare [选项] 变量名
选项:
-r 声明或显示只读变量
-i 将变量定义为整型数
-a 将变量定义为数组
-A 将变量定义为关联数组
-f 显示已定义的所有函数名及其内容
-F 仅显示已定义的所有函数名
-x 声明或显示环境变量和函数,相当于export
-l 声明变量为小写字母 declare –l var=UPPER
-u 声明变量为大写字母 declare –u var=lower
exec命令:
作用:与bash一样,执行命令,但不会开启一个子shell来运行命令,而是用当前执行的命令替代当前的shell,命令运行完就退出
例:
exec sleep 5 #执行完睡眠后,退出当前shell
mktemp命令:
作用:用于创建临时目录,必要时可用于脚本中生成临时文件
mktemp [选项]... [TEMPLATE]
选项:
-d 创建临时目录
-p /tmp 指定临时文件存放位置,默认在/tmp中
说明: 引用一般用变量指定,如:tmpfs=$(mktemp 1.XXX)
例:
mktemp 1.XXX #“X”是让系统随机生成字符,至少三个
read命令:
作用: 从标准输入获取字符串,并赋值变量
read [选项] ["描述信息"] 变量名
常见选项:
-p 指定要显示的提示
-s 静默输入,一般用于密码
-n N 指定输入的字符长度N
-d '字符' 输入结束符
-t N TIMEOUT为N秒
-a 交互式数组赋值
案例
a=qq,11,22
#按分隔符切割赋值
IFS=',' read -r q w e <<< "$a"
echo $q $w $e
action函数:
此命令是一个函数,必须执行/etc/init.d/function来调用,且仅存在于reahat系列
使用方法:
. /etc/init.d/function
例:
action "123" /bin/ture #会输出成功的字样
action "1233" /bin/false #输出带有颜色的失败
shift命令:
作用: 用于参数位置偏移,类似于栈的工作逻辑
说明:
当传参时,a b c三个参数,a参数为1号位,a读取后,b位移到1号位,b读取后,c位移到1号位,这样确保每个参数始终是第一个,没有参数时就显示为空
适用:
可用于脚本中,执行传参时只用$1,但是又可以给很多参数,此时就不在需要关注参数总共有多少个,只需要处理参数就可以,因为shift会保证参数始终在第一个位置,能够成功读取到,没有参数后为空(也就是为假,会自动退出)
例:
vim ts.sh
#!/bin/bash
main(){
while [ $1 ]; do
echo $1
shift
done
}
main $@
bash ts.sh 1 2 3 #此时,会依次打印1,2,3,如果没有shift,会进入死循环,打印1
eval命令:
作用:eval命令将会首先扫描命令行进行所有的置换,然后再执行该命令。该命令适用于那些一次扫描无法实现其功能的变量,该命令对变量进行两次扫描
例:
a=pwd
eval $a #先把$a转换成字符串"pwd",再把字符当命令执行
eval pwd #直接执行,无需置换
trap命令:
作用: 进程收到系统发出的指定信号后,将执行自定义指令,而不会执行原操作
注意:捕获不了9信号
例:
trap '触发指令' 信号1 信号2 ...
trap '' 信号 #忽略信号的操作
trap '-' 信号 恢复原信号
trap -p 列出自定义信号
trap 函数 exit exit信号时,执行函数
ldd命令:
作用: 列出命令执行时所依赖的C函数库
例:
ldd `which pwd`
ldd /bin/ls


浙公网安备 33010602011771号