您的位置:首页 > 运维架构 > Shell

shell脚本编程 一

2014-03-30 12:14 120 查看
一、概述

shell 脚本是自动化运维的重要工具,是每个运维人员必备的技能之一。shell 脚本与 DOS 下的批处理相似,就是将一系列命令写入一个或几个文件中,方便的一次执行。同时,shell 脚本还支持循环、条件判断和正则表达式等语法。可以这么说,shell 脚本是优秀的运维人员手中的利器。

二、基本语法

1.开头
#!/bin/bash
每一个 shell 脚本都以 #!/bin/bash 开头,它告诉系统执行这个脚本时所调用的是 bash,bash 也可以换成 csh、sh 等 shell,这要根据执行脚本时 Linux 运行的是哪种 shell(可以使用 cat /etc/shells 来查看系统支持的 shell 类型)来决定。

2.注释
#
好的程序都有简单明了又不冗余的注释,shell 脚本使用 # 来开始一行注释,任何以 # 开头的行都是注释。





一个简单的shell脚本

脚本的执行可以使用 sh 命令,也可以使用 . 命令,还可以是用脚本直接执行,不过要给脚本执行的权限:chmod +x hello.sh



3.变量
shell 脚本中的变量都是字符串组成的,不需要事先声明,当要用到一个变量的时候,直接以 NAME=VALUE 的形式来使用。比如



变量的引用是由 $ 开始的,如上,引用变量 a,就使用 $a。

在 shell 脚本中,变量默认都是以字符串形式存储的,比如



如果要避免这种情况,可以使用 declare 命令来显示声明变量,declare 是 bash 的一个内建函数,使用 -i 选项声明把变量声明成整数,比如



4.变量类型
本地变量:作用域为整个 shell 进程
使用 NAME=VALUE 形式的变量都是本地变量,本地变量从出现的时候开始,在整个 shell 脚本执行的过程中都存在
局部变量:使用 local 声明,作用域为当前代码段
局部变量一般出现在函数的内部,为了与外部同名的变量进行区分,使用 local 前缀,表示它只存在于函数执行的过程中,与外部变量无关
环境变量:使用 export 声明,作用域为当前 shell 进程及其子进程
环境变量即为 shell 的环境变量
特殊变量
特殊变量主要有以下几个:
$1 $2 ...:$n 表示的是脚本所跟的第 n 个参数,比如





$?:上一条语句执行的状态返回值。每一条语句的执行都有状态返回值,执行成功返回值是 0,执行不成功返回值是非 0 的,类似 C 语言,比如



执行成功



执行不成功

5.条件测试
shell 脚本进行条件测试的方式有三种
test expression
[ expression ]
[[ expression ]]
其中最常使用的是第二种,这里要注意的一点是,expression 的左右两边都要有一个空格。

6.测试条件
整数比较
-gt:greater than 大于
-ge:greater than and equal 大于等于
-lt:小于
-le:小于等于
-eq:等于
-ne:不等于





字符串比较(ASCII 顺序)
==
>
<
-n:测试字符串是否为空
-z:测试字符串是否不空
注:字符串变量要加引号

文件测试
-e FILE:exist 判断文件是否存在
-f FILE:file 判断是否是普通文件
-d FILE:dictionary 判断是否为目录
-h/-L FILE:是否为符号链接
-r FILE:当前用户是否有读权限
-w FILE:当前用户是否有写权限
-x FILE:当前用户是否有执行权限
-s FILE:文件大小不为零





7.逻辑比较
&&:与
||:或
!:非
8.组合条件测试
-a:与
-o:或
!:非

关于逻辑比较和组合条件测试的区别请看着两个表达式:

if [ $? -gt 1 -a $? -lt 3 ]

if [ $? -gt 1 ] && [ $? -lt 3 ]

区别一目了然.

三、总结

基础部分先说到这里了 ^ ^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: