shell脚本调试
bash -n /path/to/some_script #检测脚本中的语法错误
bash -x /path/to/some_script #跟踪调试执行,显示每一步的执行结果
变量
字符串变量
name="ABC" #开辟一块内存,存入字符串ABC,name绑定到这块内存
name="XYZ" #开辟一块新的内容,存入字符串XYZ,name绑定新的内存,原先的内存被标记为可覆盖
如果字符串本身包含空格等字符,加上单/双引号可保留
name="A BC"
name='AB C'
`command`可以嵌套命令结果
name=`hostname`
echo “变量”,可保留变量格式
name=`cat /etc/passwd`
echo=$name #所有内容显示在一行
echo="$name" #按变量内容格式显示
bash变量是弱类型
bash不支持浮点数运算
bash中变量的种类
根据变量的生效范围等标准划分为:
局部变量
生效范围为当前shell进程;对当前shell之外的其他shell进程,包括当前shell的子shell进程均无效
变量不向子进程传递,也不接受子进程的变量
环境(全局)变量
生效范围为当前shell进程及子进程
使用export 或者 declare -x 关键字将变量声明为全局变量。先赋值再声明,或声明赋值合并。
name="wang"
export name
export name="wang"
declare -x #查看所有环境变量
env #查看所有环境变量
set #显示所有变量(包括自定义的)
变量可以传递给子进程,但不接受子进程的修改
使用 unset 关键字删除变量
本地变量
生效范围为当前shell进程中某代码片段,通常至函数
位置变量
$1,$2,$3……来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数
特殊变量
$?,$0,$*,$@,$$,$#
只读变量
readonly name #声明只读变量
declare -r name #声明只读变量
readonly -p #查看只读变量
小括号()的用法
(cmd) #括号内的命令在一个子shell中执行,不影响当前环境,“一次性的执行,用后不对当前环境造成影响”
小括号开启的子shell会继承父shell的变量,但是不影响父shell的变量