常用的bash shell脚本 一些常用的运维管理方法
时间:2014-07-11 00:53 来源:linux.it.net.cn 作者:IT网
在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!
在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则.
1. 单引号和双引号的区别
单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是 普通字符 ,不会作变量的引用,直接输出字符窜。请看如下例子:
从上面例子可以看出,使用了单引号的时候,那么$name只是普通字符,直接输出而已!
2. 逐行读取文件
-
使用for循环来读取文件
-
使用while循环读取文件
3. bash shell 脚本中常用隐含变量
$0
当前执行的脚本或者命令名称
$1-$9
代表参数的位置. 举例 $1 代表第一个参数.
$#
脚本调用的参数的个数
$@
所有参数的内容
$*
所有参数的内容
$$
当前运行脚本的进程号
$?
命令执行后返回的状态
$!
后台运行的最后一个进程号
请看测试例子
输出结果
4. 变量内容的删除与替换
我们在一些情况下,需要对变量中的字符窜进行查找删除或者替换,就需要使用下表列出的方法
变量设定方式
说明
${变量#关键字}
若变量内容从头开始的资料符合‘关键字’,则将符合的最短资料删除
${变量##关键字}
若变量内容从头开始的资料符合‘关键字’,则将符合的最长资料删除
${变量%关键字}
若变量内容从尾向前的资料符合‘关键字’,则将符合的最短资料删除
${变量%%关键字}
若变量内容从尾向前的资料符合‘关键字’,则将符合的最长资料删除
${变量/旧字串/新字串}
若变量内容符合‘旧字串’则‘第一个旧字串会被新字串取代
${变量//旧字串/新字串}
若变量内容符合‘旧字串’则‘全部的旧字串会被新字串取代
举例如下(删除字符窜中的某个字符):
5. 变量条件测试赋值
在某些时刻我们需要‘判断’某个变量是否存在,若变量存在则将此变量值赋值给新的变量,若变量不存在则将其他值赋值给新的变量.
变量设定方式
str 未定义
str 为空字串
str 已赋值为非空字串
var=${str-expr}
var=expr
var=
var=$str
var=${str:-expr}
var=expr
var=expr
var=$str
var=${str+expr}
var=
var=expr
var=expr
var=${str:+expr}
var=
var=
var=expr
var=${str?expr}
expr 输出至 stderr
var=
var=$str
var=${str:?expr}
expr 输出至 stderr
expr 输出至 stderr
var=$str
var=${str=expr}
var=expr
var=
var=$str
var=${str:=expr}
var=expr
var=expr
var=$str
举例如下:
6. shell 中分隔符 : 变量IFS 使用
shell脚本中,如果使用for循环一个字符窜的话,默认使用空格来分割字符窜. 还有前面所提到的 使用for循环逐行读取文件内容时候,文件行中如果有空格的话输出的结果也会变乱. 这个时候 使用 IFS 变量来设置特定的字符窜分割符来,达到输出正确的目的. 默认情况下 IFS 是使用 <space><tab><newline>, 空格 \t \n 来作为默认的分割符的.
我们将前面使用for逐行读取文件的例子 改进下就可以输出正确了,请看下面
file.txt 文件内容如下
执行测试程序 输出结果如下(正确输出)
如果未设置IFS变量,使用默认的IFS变量值 ,输出结果如下
从以上测试程序输出结果,可以根据自己的需求来设定 IFS变量,在举一个例子如下:
7. shell 数组的使用
数组赋值方式:
计算数组元素个数或者长度:
了解了数组基础语法,举例说明,请看:
在看一个复杂一点的例子,将文件内容读取到数组中:
8. 逻辑判断 条件测试
-
文件属性的判断
操作符
测试结果
-e filename
文件存在返回1, 否则返回0
-r filename
文件可读返回1,否则返回0
-w filename
文件可写返回1,否则返回0
-x filename
文件可执行返回1,否则返回0
-o filename
文件属于用户本人返回1, 否则返回0
-z filename
文件长度为0返回1, 否则返回0
-f filename
文件为普通文件返回1, 否则返回0
-d filename
文件为目录文件时返回1, 否则返回0
举例如下,测试文件是否存在:
-
字符串比较
操作符
比较结果
str1 = str2
当两个字串相等时为真
str1 != str2
当两个字串不等时为真
-n str1
当字符串的长度大于0时为真
-z str1
当字符串的长度为0时为真
str
当字符串为非空时为真
举例如下,比较字符串来测试用户ID :
-
数值比较(整数)
操作符
比较结果
num1 -eq num2
两数相等为真
num1 -ne num2
两数不等为真
num1 -gt num2
num1大于num2为真
num1 -ge num2
num1大于等于num2为真
num1 -lt num2
num1小于num2为真
num1 -le num2
num1小于等于num2为真
举例如下:
如果要查看详细的测试操作,可以查看man手册 man test
(责任编辑:IT)
在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了! 1. 单引号和双引号的区别单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是 普通字符 ,不会作变量的引用,直接输出字符窜。请看如下例子: 从上面例子可以看出,使用了单引号的时候,那么$name只是普通字符,直接输出而已! 2. 逐行读取文件
3. bash shell 脚本中常用隐含变量
请看测试例子 输出结果 4. 变量内容的删除与替换我们在一些情况下,需要对变量中的字符窜进行查找删除或者替换,就需要使用下表列出的方法
举例如下(删除字符窜中的某个字符): 5. 变量条件测试赋值在某些时刻我们需要‘判断’某个变量是否存在,若变量存在则将此变量值赋值给新的变量,若变量不存在则将其他值赋值给新的变量.
举例如下: 6. shell 中分隔符 : 变量IFS 使用shell脚本中,如果使用for循环一个字符窜的话,默认使用空格来分割字符窜. 还有前面所提到的 使用for循环逐行读取文件内容时候,文件行中如果有空格的话输出的结果也会变乱. 这个时候 使用 IFS 变量来设置特定的字符窜分割符来,达到输出正确的目的. 默认情况下 IFS 是使用 <space><tab><newline>, 空格 \t \n 来作为默认的分割符的. 我们将前面使用for逐行读取文件的例子 改进下就可以输出正确了,请看下面 file.txt 文件内容如下 执行测试程序 输出结果如下(正确输出) 如果未设置IFS变量,使用默认的IFS变量值 ,输出结果如下 从以上测试程序输出结果,可以根据自己的需求来设定 IFS变量,在举一个例子如下: 7. shell 数组的使用数组赋值方式: 计算数组元素个数或者长度: 了解了数组基础语法,举例说明,请看: 在看一个复杂一点的例子,将文件内容读取到数组中: 8. 逻辑判断 条件测试
举例如下,测试文件是否存在:
举例如下,比较字符串来测试用户ID :
举例如下: 如果要查看详细的测试操作,可以查看man手册 man test (责任编辑:IT) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||