(本节笔记的实验代码,在这里)
1. 基本概念
脚本是一个包含一系列命令序列的文本文件。当运行该脚本文件时,文件中包含的命令序列将得到自动执行。
2. 脚本编程技术
2.1 基本结构
『
#!/bin/sh
......
』
2.2 变量
shell脚本允许用户设置和使用变量,变量可以是数字或者字符串,用户无需指定其类型,也无需在使用前定义。
//在赋值的时候,变量名前不需要加“$”,但在使用时要加上“$”。
//赋值号左右不能有空格
//注释用“#”开头
//在windows编辑的.sh文件有可能包含非Unix字符,需要用dos2unix工具进行格式转换(dos2unix可以通过RPM包安装)
『
#!/bin/sh
a="helloworld"
b=5
echo"A is:" $a
echo"B is:" $b
』
输出: hello world
5
2.3 参数
同C程序一样,shell脚本可以使用命令行参数
l $#:传入脚本的命令行参数个数
l $*:所有命令行参数值,在各个参数值之间留有空格
l $0:命令本身(shell文件名)
l $1:第一个命令行参数
l $2:第二个命令行参数
『
#!/bin/sh
echo"number of var:" $#
echo"value of vars:" $*
echo"name of script:" $0
echo"value of val1:" $1
echo"value of val2:" $2
』
输入:./shell.sha 3
输出: number of var: 2
valueof vars: a 3
nameof script: ./shell.sh
valueof val1: a
valueof val2: 3
2.4 数学计算
shell脚本提供一个专门的命令“expr”来计算数学表达式,例如“expr 5 + 1”,但当要把计算结果赋值给某个变量的时候,必须使用反引号。
『
#!/bin/sh
var1=10
var2=20
var3=`expr$var2 / $var1`
var4=`expr$var2 + $var1`
echo"var3 is: "$var3
echo"var4 is:" $var4
』
输出:
var3is: 2
var4is: 30
2.5 if语句
shell脚本中最基本的流程控制语句为“if-then”,使用格式为:
//方括号左右两边必须空格
//“=”左右两边都要有空格
if[ condition ]
then
commands
else
commands
fi
比较操作 整数操作 字符串操作
相同 -eq =
不同 -ne !=
大于 -gt >
小于 -lt <
大于或等于 -ge
小于或等于 -le
为空 -z
不为空 -n
例如:
比较整数a和b是否相等: if [ $a = $b ]
判断正数a是否大于正数b: if[ $a -gt $b ]
比较字符串a和b是否相等: if [ $a = $b ]
判断字符串a是否为空: if[ -z $a ]
判断正数变量a是否大于b: if [ $a -gt $b ]
文件的比较:
-e 文件已经存在
-f 文件是普通文件
-s 文件大小不为零
-d 文件是一个目录
-r 文件对当前用户可以读取
-w 文件对当前用户可以写入
-x文件对当前用户可以执行
例如:
folder=/home
[-r "$floder" ]&&echo"can read $folder" #条件为真时执行
[-f "$folder" ]||echo "this is not file" #条件为假时执行
『
#!/bin/sh
var=10
if[ $var -gt 5 ]
then
echo"the value is greater than 5"
fi
』
输出:var greater than 5
2.6 for语句
shell脚本提供for命令,用于创建类似C中的for循环,格式如下:
forvar in list
do
commands
done
『
#!/bin/sh
list="SunMon Tue Wed Thur Fri Sat"
forday in $list
do
echo$day
done
』
输出: Sun
Mon
Tue
Wed
Thur
Fri
Sat
2.7 while语句
shell脚本提供了while命令,用于创建类似C语言中while语句一样的循环,格式如下:
whilecondition
do
commands
done
『
#!/bin/sh
var=5
while[ $var -gt 0 ]
do
echo$var
var=`expr$var - 1`
done
』
输出: 5
4
3
2
1
2.8 sed编辑器
Sed(Stream Editor):流式编辑器又名行编辑器,每次只编辑一行,使用格式如下:
sed[操作选项] '命令' 文件名
常用操作选项:
-n:指定处理后只显示该行
-e:进行多项编辑任务
-i:直接修改读取的文件内容,而不是有屏幕输出
常用命令选项:
p打印匹配行
a新增
c替代一行
d删除定位行
s替代一行中的某些部分
例如:
1.显示
sed-n '2p' tmp.txt 只显示第二行
sed-n '1,3p' temp.txt 打印第一行到第三行
sed-n '/mov/'p temp.txt 打印含mov的行
2.删除
sed'2d' tmp.txt 删除第二行
sed'3,$d' tmp.txt 删除第三行到最后一行,“$”最后一行
3.查询
sed-n '/hello/p' tmp.txt 查询包括关键字hello的所有行
4.代替
sed'1c Hi' tmp.txt
sed-n '/hello/p' tmp.txt | sed 's/hello/bird/g'
5.插入
sed-i '$d bye' tmp.txt #在最后一行插入bye
2.9awk分析器
awk是一个强大的文本分析工具,它吧文件逐行的读入,以空格为默认分隔符,将每行分割为多个字段,使用格式为:
awi'{pattern + action}' filenames
pattern: 要查找的内容
action: 找到匹配内容是执行的命令
例如:
last-n 5 | awk '{print $1}'
cat/ect/passwd | awk -F ':''{print $1}'
awk-F ':' '$1=="root"{print $0}' /ect/passwd