沙漏不倒翁 - 小屋

%toc

shell语法

安全

重定向

重定向到标准流要利用 & 如: echo a 1>&2

命令行参数

$1   第一个参数  
$(10)   第10个参数  
$#   参数个数  
$* $@ 一次表示所有参数  
"$*"   等同于 "\(1 \)2 $3 ..."  
"$@"   等同于 "\(1" "\)2" "$3" ...  

注: 上述出现 \( \) 都是vimwiki转义问题,实际上都是 $

变量

常用命令

export  
export -p 打印所有被export的变量
readonly  
readonly -p  
unset -v variable 默认选项-v
unset -f function  
env -i PATH=XX ls 先修改PATH再ls

内置变量表

# 目前进程参数个数
@ 传递给当前进程的命令行参数
* 当前进程的命令行参数
- 选项列表
? 前一个命令退出状态
$ PID
0 shell程序的名称
! 最后一个后台命令的进程编号

取值方法

${a:-b} 如果a存在且非null,则返回a的值,反则返回b
${a:=b} 同上,不过a同时赋值b
${a:?b} a存在非null返回a的值~否则,输出a: b 并退出
${a:+b} a存在非null返回b,否则返回null

以上表达式去掉:的话各效果去掉 非null

调试

开启命令跟踪

set -x
something   # 执行时被输出原话
set +x

分支与循环

if-loop

函数

f()
{
    echo $1
    echo $2
}

f "a" "b"
f a b

exec

替代原shell进程,原shell进程不再继续运行

主题来自 Ruchee