shell脚本高级编程

1.什么是脚本

脚本是一个包含一系列命令序列的文本文件。当运行这个脚本时,文件中包含的命令序列将得到自动执行。

2.脚本编程技术

2.1基本结构
#!/bin/bash 指明使用bash解析器

2.2变量
shell脚本允许用户设置和使用自己的变量,变量可以是数字或者字符串,用户无需指定其类型,也无需在使用前定义。
#!/bin/bash
a="hello world"
b=5
echo "A is:$a"
echo "B is:$b"
等于号两边不能有空格,注释用#,echo后面要加空格

2.3  参数
同C程序一样,shell脚本中也可以使用命令行参数
$# :传入脚本的命令行参数个数
$* :所有命令行参数值,在各个参数值之间留有空格
$0 :命令本身(shell文件名)
$1 :第一个命令行参数
$2 :第二个命令行参数

2.4 数学计算
shell脚本提供了一个专门的命令expr来计算数学表达式,例如expr 5 + 1,但是当要把计算的结果赋值给其他变量的时候,还必须使用反引号。
var=`expr 20 / 10`

#!/bin/bash
a=10
b=10
sum=`expr $a + $b`
echo $sum

2.5.1 if 语句
shell脚本中最基本的流程控制语句就是if-then,使用格式:
if [ condition ]     ( 特别提醒 :方括号左右两边必须有空格)
then
    commands
else
    commands
fi


2.5.1 条件比较
比较操作         整数操作        字符串操作
相同                  -eq                       =
不 同                 -ne                       !=
大于                  -gt                        >
小于                  -lt                         <
大于或等于      -ge
小于或等于      -le
为空                  -z
不为空              -n

例 :
比较整数a 和b 是否相等:    if [ $a = $b ]  ( 也可用eq)
判断整数a 是否大于整数b :if [ $a -gt $b ]
比较字符串a 和b 是否相等:if [ $a = $b ]
判断字符串a 是否为空 :       if [ -z $a ]
判断整数变量a 是否大于b :if [ $a -gt $b ]
注 意 :
1. 在“ “[” 和“]” 符号的左右都留有空格
2. “=” 左右都有


-e 文件已经存在
-f 文件是普通文件
-s 文件大小不为零
-d 文件是一个目录
-r 文件对当前用户可以读取
-w 文件 对当前用户可以写入
-x 文件对当前用户可以执行

#!/bin/sh
folder=/home
[ -r "$folder" ] && echo "Can read $folder"    为真时执行echo
[ -f "$folder" ] || echo "this is not file"    为假时执行echo

2.5.2 for 语句
shell脚本提供了for命令,用于创建类似于c语言编程中for语句一样的循环。使用格式:
for var in list
do
    commands
done


2.5.3 while 语句
shell脚本提供了while命令,用于创建类似于c语言编程中while语句一样的循环。使用格式:
while condition
do
    commands
done


2.6 sed编辑器
Sed(Stream Editor) : 流式编辑器又名行编辑器,每次只编辑一行,使用格式如下:
sed [操作选项] ‘命令’ 文件名
常用操作选项:
-n∶指定处理后只显示该行
-e∶进行多项编辑任务
-i∶直接修改读取的文件内容,而不是由屏幕输出

常用命令选项:
p 打印匹配行
a 新增
c 替代一行
d 删除定位行
s  替代一行中的某些部分

2.6 sed-范例
1. 显示
•sed -n '2p' tmp.txt 只显示第2行
•sed -n '1,3p' temp.txt 打印第1行到第3行
•sed -n '/mov/'p temp.txt 打印含movie的行
2. 删除
•sed ‘2d’ tmp.txt 删除第2行
•sed ‘3,$d’ tmp.txt 删除第3行到最后一行,$:最后一行
3. 查询
sed -n ‘/hello/p’ tmp.txt  查询包括关键字hello的所有行
4. 代替
•sed ‘1c Hi’ tmp.txt 第1行代替为Hi
•sed -n '/hello/p' tmp.txt | sed 's/hello/bird/g'
5. 插入
•sed -i ‘$a bye’ tmp.txt 在最后一行插入bye
2.6 awk 分析 器
awk是一个强大的文本分析工具,它把文件逐行的读入,以空格为默认分隔符将每行分割为多个字段。
使用方式:
awk ‘{pattern + action}' filenames
pattern 要查找的内容
action 找到匹配内容时所执行的命令
•last –n 5 | awk ‘{print $1}’
•cat /etc/passwd | awk –F ‘:’ ‘{print $1}’
•awk –F ‘:’ ‘$1==“root” {print $0}’ /etc/passwd



你可能感兴趣的:(Linux编程,linux,c,linux编程,shell编程)