shell脚本学问(一) 基本知识预备

shell脚本知识(一) 基本知识预备

1、shell脚本一般以#!开头。


2、printf: printf “%-5s  %-10s  %-4s\n” No Name Mark。%-5s指明一个格式为左对齐且宽度为5的字符串替代(-表示左对齐),如果不用-指定对齐方式,字符串则采用右对齐。宽度指定了保留给某个变量的字符数。对Name而言,保留宽度是10。


3、获得字符串的长度:var=1213434545345     length=$(#var) 可以获得字符串长度,存放在length中。 获得使用哪种shell:echo $SHELL 或者 echo $0。 echo $UID 为0则为超级用户。


4、shell中数学运算:可以利用let、(())和[ ] 执行基本算数操作,高级操作使用 expr和bc。 n1=10 n2=12    自加:let n1++    result=$[ n1+n2 ]   retult = `expr 3+4`  result=$(expr $n1 +3)


5、文本描述符。 0 —— stdin  (标准输入)

                               1 —— stdout (标准输出)

                               2 —— stderr (标准错误)

使用 echo $? 可以打印退出状态。

错误重定向: ls + 2> out.txt      将错误信息输出到out.txt中。


6、数组定义: array_var=(1 2 3 4 5 )  或者 array_var[0] = "test1"。 echo ${array_var[*]} 输出所有的值,echo ${array_var[2]} 输出第二个 值。


7、获取终端信息。 获取终端的行数和列数: tput cols     

                                                                                tput lines

光标移动懂啊方位(100,100)处: tput cup 100 100

获得时间:date,日期格式如下:

shell脚本学问(一) 基本知识预备

$ date "+%d %B %Y"
09 February 2015


8、脚本调试。

使用选项-x,启动跟踪调试shell脚本:

$ bash -x script.sh

-x标志能打印出所有执行的每一行命令及当前状态。输出到stdout。

可以在脚本中启用或禁止调试打印。

set -x :在执行时显示参数和命令

set +x:禁止调试

set -v:当前命令进行读取时显示输入

set +v:禁止打印输入。


9、函数和参数。

定义函数:

function fname()

{

     statements;

}

或者

fname()

{

    statements;

}

只要使用函数名就可以调用某个函数:

$ fname ;

fname arg1 arg2 ;传递参数

fname()

{

   echo $1, $2; #访问参数1和参数2

  echo “$@”  ; 以列表形式一次性打印所有参数  类似有“$*”

}

$1是第一个参数

$2是第二个参数

$n是第n个参数

"$@"  被扩展成“$1” "$2" "$3"等。


10、利用子shell生成一个独立的进程

子shell本身就是独立进程。可以使用()操作符来定义一个子shell:

pwd;

(cd /bin;ls)

pwd;

子shell中执行时,不会对当前shell有任何影响,所有改变仅限于子shell内。如上例子中两个pwd命令输入内容一致。


11、read 读取键盘命令。

读取n个字符并存入变量var:   read  -n  2 var

不回显的方式读取密码: read -s var

显示提示信息: read -p “Enter input:”  var

两秒内键入的字符串读入var:read  -t  2 var


12、-gt :大于; -lt :小于;  -ge:大于或等于;  -le :小于或等于;  -a:逻辑与 ;  -o : 逻辑或。 -ne 不等于, -eq 等于。

[ $var1 -ne 0  -a  $var2 -gt 2 ]  var1不等于0,并且var2大于2。


系统文件相关测试:

[  -f $file_var  ] ;如果给定的变量包含正常文件路径或文件名,返回真

[  -x $var  ] :如果变量包含的文件可执行,为真

[  -d $var  ]: 包含目录为真。

[  -e $var  ]:包含的文件存在,为真

[  -c $var  ]:包含字符设备,为真

[  -b $var  ]:块设备,为真

[  -w $var  ]:可写,为真 ; -r可读为真; -L 符号连接,为真。


字符串比较:

[[  $str1  =  $str2  ]] :相等返回真。  !=  不等返回真。  >  大于返回真 ,  <    小于返回真。

[[  -z  $str1  ]]  :空字符串返回真  ,  -n  非空返回真。