Shell脚本编程 初步

什么是脚本文件

脚本是一个包含一系列命令序列的文本文件。当运行这个脚本文件时,文件中包含的命令序列将得到自动执行。这种文本文件可以执行,可以提高工作效率。扩展名为 “.sh

脚本文件通常以 #!/bin/bash 或者 #!/bin/sh 开头。

定义变量

shell脚本允许用户设置和使用自己的变量,变量可以是数字或者字符串,用户无需指定其类型,也无需在使用前定义
使用变量时,前面要加“$”符号,给变量赋值时,不能加该符号,而且赋值的等号左右都不能有空格
在任何时候使用变量都要在前面加上$符号。

举例: 注释用“#”号表示

#!/bin/sh
a="hello world"
b=5
echo “A is: $a#打印内容
echo “B is $b

注意:在UltraEdit编写后的.sh文件是dos格式的,需要使用相应命令转换为linux格式,命令为dos2unix ./*.sh 。该命令要通过安装光盘安装。在编辑相关代码之后,最好要进行一次该命令。

命令行参数

同C程序一样,shell脚本中也可以使用命令行参数

  • $# :传入脚本的命令行参数个数
  • $* :所有命令行参数值,在各个参数值之间留有空格
  • $0 :命令本身(shell文件名)
  • $1 :第一个命令行参数
  • $2 :第二个命令行参数

举例:

echo "number of var" $#
echo "value of var" $*
echo "name of script" $0
echo "value of var1" $1
echo "value of var2" $2

运行结果:
这里写图片描述

脚本中进行数学运算

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

var=`expr 20 / 10`
var3=`expr $var1 / $var2`
echo "the value is:" $var3

if语句

shell脚本中最基本的流程控制语句就是if-then,使用格式:

if [ condition ] (特别提醒:方括号左右两边必须有空格)
then
commands
else
commands
fi

condition条件写法:

这里写图片描述

例:
比较整数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. 比较中的“=”左右都有空格

这里写图片描述

#!/bin/sh
folder=/home
[ -r "$folder" ] && echo "Can read $folde
[ -f "$folder" ] || echo "this is not file"

&& 当前面条件为真时,执行后面语句
|| 当前面条件为假时,执行后面的语句

for语句

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

举例:

list="Sun Mon Tue Wed Thur Fri Sat"
for day in $list 
do
    echo $day
done

注意:第二个list和第二个day是使用变量要加上$,第一个day实际上是赋值,不需要加。

while语句

shell脚本提供了while命令,用于创建类似于c语言编程中while语句一样的循环。使用格式:
while [ condition ] #当条件为真时,执行循环体
do
commands
done

举例:

var=10
while [ $var -gt 5 ] 
do
    echo "the value of var is:" $var
    var=`expr $var - 1`
done 

sed编辑器

Sed(Stream Editor) : 流式编辑器又名行编辑器,每次只编辑一行,使用格式如下:
sed [操作选项] ‘命令’ 文件名

常用操作选项:
-n∶指定处理后只显示该行,默认显示全文件
-e∶进行多项编辑任务
-i∶直接修改读取的文件内容,而不是由屏幕输出

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

举例: 注意命令的写法,字母的位置
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’
(将hello字符串替换为bird字符串,符号/起到间隔和结束的作用,可以不写g)

5、 插入:
•sed -i ‘$a bye’ tmp.txt (在最后一行插入bye)

只有加上了-i,原文件才会被真正的修改。
p和s命令字母可以在引号外,但是前后不能颠倒,即p在后,s在前。

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

$1 表示第一个字段。

$0 表示整个一行。

参数 -F 表示指定分隔符,-F ‘:’ 表示指定 冒号: 为分隔符

$1==”root”为加入的条件,第一个字段为root的行

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值