参考书籍 Linux shell 脚本攻略
tput以及stty终端工具 * 获取终端的行数和列数 tput cols tput lines * 打印当前终端名 tput longname * 将光标移动到方位(x,y)处 tput cup $x $y * 设置终端背景色,no可以在0-7之间取值 tput setb no * 设置终端前景色 tput setf no * 设置文本样式为粗体 tput bold * 设置下划线的开闭 tput smu1 tput rmu1 * 删除当前光标位置到行尾的所有内容 tput ed
Bash本身包含了一些选项能够打印出脚本接受的参数和输入。 * 使用-x选项,启动跟踪调试shell脚本,能够打印出所执行的每一行命令以及当前状态。也可以使用sh -x script.sh。 $ bash -x script.sh * set -x:在执行时显示参数和命令 * set +x:禁止调试 * set -v:当命令进行读取时显示输入 * set +v:禁止打印输入 * 文件头从 #!/bin/bash改成 #!/bin/bash -xv,不用任何其他选项就可以启动调试功能。
定义函数
function fname() { statements; } fname() { statements; }只需要使用函数名就可以调用某个函数 $ fname ;#执行函数 $ fname arg1 arg2; #传递参数 * 1是第一个参数∗ 1 是 第 一 个 参 数 ∗ 2是第二个参数 * $n是第n个参数 * $@被扩展为 "$1" "$2" "$3"等 * $* 被扩展为 "$1c$2c$3",其中c是IFS的第一个字符。 * $@用的最多。由于$*将所有的参数当做单个字符串。
内部字段分隔符(IFS,Internal Field Separator)是shell脚本的一个重要概念。
data="name,sex,rollno,location" oldIFS=$IFS IFS=, for item in $data; do echo Item: $item done IFS=$oldIFS for 循环 for var in list; do commands; done生成序列 echo {1.. 50} echo {a.. z} for循环也可以采用c语言中for循环的格式
for((i=0;i<10;i++)) { commands; } while循环 while condition do commands; done until循环:会一直循环直到给定的条件为真 x=0 until [ $x -eq 9 ]; do let x++; echo $x; done条件通常放在封闭的中括号内,注意在[或]与操作数之间有一个空格,否则会报错 [ $var -eq 0 ] [ $var -ne 0 ] * -gt 大于 * -lt 小于 * -ge 大于等于 * -le 小于等于 * -a 逻辑与 [ var1 -ne 0 -a $ var2 -gt 2 ] *-o` 逻辑或
使用字符串比较时,最好用双中括号因为有时候采用单中括号会产生错误。
[[ $str1 = $str2 ]] [[ $str1 == $str2 ]] [[ $str1 != $str2 ]] [[ $str1 > $str2 ]] [[ $str1 < $str2 ]] [[ -z $str1 ]] # 空字符串则返回真 [[ -n $str1 ]] #非空字符串,则返回真。