> shell编程 >

linux shell 编程常需要的注意点


1.在shell脚本“#”放在行首用来表示注释行,是不被shell执行的。然而,在shell脚本的第一行中,“#!”是     用来告诉shell是用linux系统中的那个shell来运行脚本,因为系统一般有多个不同类型的shell。


2.要用单点操作符来运行shell脚本,比如:当前目录下./s.sh,其他目录:./绝对路径或者相对路径/s.sh


3.echo命令可用单引号或双引号来将文本字符串圈起来,如果你在字符串中用到了它们,你需要在文本中使用       其中一种引号,而用另外一种来将字符串圈起来,比如:
  echo "This is a test to see if you're paying attention"
  echo 'Rich says "scripting is easy" '


4.如果你想在同一行中显示文本字符串,使用echo -n 字符串


5.如果你想在shell脚本显示输出特殊字符,比如“$”等等,必须使用转义字符“\”,即“\$”


6.用户变量可以是任何不超过20个字母、数字、下划线的文本字符串,用户名区分大小写,值通过“=”赋值给用户变量,在变量、等号和值之间不能出现任何空格(困扰初学者的用法),shell脚本会自动决定变量值的数据类型。


7.引用一个变量值时需要使用美元符,而引用变量来对其赋值时不需要美元符号,如:
   var=10
   var1=$var
   echo "$var and $var1"
   var2=$[$var*$var1]


8.反引号``允许你将shell变量赋值给变量,注意它shell脚本一个主要构件,不同于单引号和双引号
如:testing=`date`  echo$testing 将显示当下的时间、


9.重定向:输出重定向 > and >>,后者用来在文件追加数据,如果文件不存在,则会创建新的文件
                 输入重定向<and <<,后者(内联输入重定向)用来从命令行输入数据,但必须要指定一个文本标记


10.管道,会将一个命令的输出作为另外一个的输入,但是请注意,linux实际上同时运行管道两边的这两个命令,一旦第一个命令产生输出的同时,输出立即送达第二个命令,中间不会出现任何中间文件或者缓冲区域。


11.显示输出是,你可以使用命令more或者less强制输出按屏或者按页来显示。


12.最好不要使用expr命令进行数学运算操作,可以使用$[operation]将数学表达式圈起来计算,bash shell 数学运算只支持整数运算,如果你要进行浮点数运算,请使用内建的bash计算器,即bc,bc是用来计算的微型计算语言,浮点运算的精度是一个内建的scale的变量来控制,默认值为0,即只显示整数部分,在脚本使用bc的基本格式如下:variable=`echo "options;expression"|bc`,options允许你可以设置变量,expression是通过bc执行的数学表达式


13.linux提供了“$?”专属变量来保存上个执行命令的退出状态码,你必须在你要查看的命令之后马上查看使用$?变量,它的值会变成shell执行完最后一条命令的退出状态码:0表示命令成功结束,127表示无效命令,你可以改变自己的退出状态码,使用exit n 命令,注意退出状态码最大只能是255,大于255的会进行mod256运算。


14.注意if-then-else中,当if语句中的命令退出状态码返回0时,才会执行then部分,否则执行else部分,这与绝大数高级语言的if-else命令不一样,切记!同理while的测试条件也类似,但是until 相反

15.注意for循环命令默认使用空格来分割列表的每个值,如果在单独的数据值中有空格,那么你必须使用双引号来将这些值圈起来。可以使用IFS(internal field separator)来改变默认的空格分隔符,一般使用之前要保存旧的分隔符,如:IFS.OLD=$IFS  IFS=$"\n" <use the new IFS value in code> IFS=$IFS.OLD。指定多个IFS字符,如IFS=$'\n:;"'


16.连接两个字符串“dafs”"dafsfa"会自动连接起来,或者用单引号。

17.test命令:test condition  或者[ condition ],注意condition的前后要有空格,不能跟[ ]连在一起

18.((expression))用来将高级数学表达式放入其中比较,通常可以跟if一起使用;

19.[[expression]],用于高级字符串处理功能,如模式匹配,也经常与if一起使用;

20.case命令的使用,提供了为变量每个可能的值指定不同的选项;

21.break  break-n continue continue-n


(责任编辑:IT)