linux shell 高级编程,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 在最后一行插入bye2.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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值