(十) shell script

shell script是自动化的利器,必须熟练掌握 

1.执行方式的区别

直接以路径来执行sh文件需要有r和x权限

以sh 文件名的方式执行只需要r权限

其实也不难理解,第二种方式只是sh的参数,没有直接执行程序,所以不需要x权限

以上的执行方式都是在父进程中打开子进程来执行的,所以默认情况下自定义变量不能在两个进程间共享

而source或者 . 的方式执行的进程是直接在当前进程下执行的

 

2.撰写 shell script 的良好习惯建立

在文件的开头,一般要记录以下信息

 

  • script 的功能;
  • script 的版本资讯;
  • script 的作者与联络方式;
  • script 的版权宣告方式;
  • script 的 History (历史纪录);
  • script 内较特殊的指令,使用‘绝对路径’的方式来下达;
  • script 运作时需要的环境变数预先宣告与设定。。

在文件的正文部分也要加适当注释,而且要适当缩进

3.数值运算

好像有很多种方式,推荐使用  $(( 运算表达式 ))

 

4.bash内置重要参数

$1~$n:传入程序或者函数的参数,$0表示程序或者函数本身
$*和$@,都表述所有的位置参数,前者视为一个字符串,后者则表示串行
$#,位置参数个数
$?,上一命令执行结束返回的值,通常0代表执行成功,非0代表有误
$$,目前bash shell 进程编号

5.条件判断的方法:

  • ((算式)),如果算式结果是0,则返回假值1,否则返回真值0
  • 内置命令:test ,特殊符号要转义,比如>,<等,要转义成/>。
  • 内置命令[ ],和test相似,两者可以转换。括号中可以使用-a,-o进行逻辑组合,推荐使用
  • bash关键字[[  判断式  ]],注意空格。也不必对特殊符号转义
  • &&和||,和-a,-o相比,用在括号[]以外
条件判断式的种类
  • 文件属性:有很多属性,-ewrx,共20多条
  • 字符串属性:-z,空为真。-n,非空为真。等。
  • 算式:-eq, -ne, -lt, -le, -gt, -ge。这里的算式是指其值或运算结果是数值。应该和>,<差不多吧?不确定
  • bash选项,[-o set的选项名称],如[-o history],若该选项开启,则返回0

6. 流程控制

主要是细节

1.if条件判断
完整语法:
if 条件测试1 ; then 
   命令区域1
elif 条件测试2 ; then
   命令区域2
else 
    命令区域3
fi
2.case条件判断
完整语法:
case 待测项 in 
   样式串行1) 命令区域1 ;;
   样式串行2) 命令区域2 ;;
   样式串行3) 命令区域3 ;;
    .....
    *)命令区域;;
esac
 
3.for循环
完整语法:
for 变量 in 串行
do
    命令区域
done
for循环经常用在分隔字符串行,取出字段元素值。注意IFS默认是三个空白符(空格,tab,换行),要是“  ; ”需要自己设置。
还有一种用法,与一般语言相似
for ((  ;  ;  ))
do
    命令区域
done
4.while和until
while  条件                       until 条件
do                                    do
    命令区域                          命令区域
done                                 done
while是条件真执行,until是假执行
5.break和continue
同java中差不多,break后可跟数字,表示跳出几层循环
 
 
7.function
function 函数名称()
{
命令区域
}
也可以省略function 或者(),推荐使用这种,比较
函数的结束状态也用$?来表示
函数中的变量以及变量传递:
local v 表示v是函数的局部变量,当变量传递进函数时,是值传递,而不是地址传递。
 
8. 追踪与调试
   
   
   
   
  1. [root@www ~]# sh [-nvx] scripts.sh 
  2. 选项与参数: 
  3. -n  :不要执行 script,仅查询语法的问题; 
  4. -v  :再执行 sccript 前,先将 scripts 的内容输出到萤幕上; 
  5. -x  :将使用到的 script 内容显示到萤幕上,这是很有用的参数! 
 

 

你可能感兴趣的:(shell,职场,script,休闲)