常用shell脚本指令

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

常用shell脚本命令

1、显示包含文字aaa的下一行的内容:

sed -n '/aaa/{n;p;}' filename

2、删除当前行与下一行的内容:

sed -i '/aaa/{N;d;}' filename

3、删除当前行与下两行的内容:

sed -i '/aaa/{N;N;d;}' filename

依次类推,删除三行,则为{N;N;N;d;},分析知:N为next

4、得出以空格为分割的字符串中单词的个数,即统计个数:

awk ' { print NF } '

如显示字符串VALUE中的单词个数,其中VALUE为:aaa bbb ccc ddd ee f

则执行 echo $VALUE | awk ' { print NF } ' 后的结果为6

5、在linux中建立一个文件与另一文件的链接,即符号链接

ln -s /var/named/chroot/etc/named.conf named.conf

这要就建立了当前目录的文件named.conf对/var/named/chroot/etc/named.conf 的符号链接。即操作named.conf就意味着操作实际文件/var/named/chroot/etc/named.conf ,这时用ll命令查看的结果如:

lrwxrwxrwx 1 root root 32 Mar 22 12:29 named.conf ->

/var/named/chroot/etc/named.conf

注意:当用sed来通过named.conf来删除一部分信息时,会将符号链接的关系丢掉,即会将named.conf变成一个实际文件。所以需对实际文件进行删除操作。

6、显示指定字符范围内的内容:

如:显示文件test.txt中字符#test begin与#test end之间所有的字符

sed -n "/#test begin/,/#test end/p" test.txt

或 awk "/#test begin/,/#test end/" test.txt

在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!在编写的过程中,掌握一些常用的技巧和语法就可以完成大部分功能了,也就是2/8原则.

1. 单引号和双引号的区别

单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符,不会作变量的引用,直接输出字符窜。请看如下例子:

[root@linux ~]# name=HaHa

[root@linux ~]# echo $name

HaHa

[root@linux ~]# myname="$name is wow"

[root@linux ~]# echo $myname

HaHa is wow

[root@linux ~]# myname='$name is wow'

[root@linux ~]# echo $myname

$name is wow

从上面例子可以看出,使用了单引号的时候,那么$name只是普通字符,直接输出而已!

2. 逐行读取文件

∙使用for循环来读取文件

for line in `cat file.txt`

do

echo $line

done

注意:由于使用for来读入文件里的行时,会自动把空格和换行符作为一样分隔符,如果行里有空格的时候,输出的结果会很乱,所以只适用于行连续不能有空格或者换行符的文件

∙使用while循环读取文件

cat file.txt |while read line

do

echo $line

done

或者:

while read line

do

echo $line

done < file.txt

注意:由于使用while来读入文件里的行时,会整行读入,不会关注行的内容(空格..),所以比for读文件有更好的适用性,推荐使用while循环读取文件

3. bash shell 脚本中常用隐含变量

中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)

$$ 变量最常见的用途是用做暂存文件的名字以保证暂存文件不会重复。

$* 和 $@ 如果输出是一样的,但是在使用for循环,在使用双引号("")引用时

"$*" 会输出成一个元素而 "$@" 会按照每个参数是一个元素方式输出

请看测试例子

#cat test.sh

#!/bin/sh

echo '"$@" output.....'

for i in "$@"

do

echo $i

done

echo '"$*" output ....'

for i in "$*"

do

echo $i

done

输出结果

#sh test.sh a b c d

"$@" output.....

a

b

c

d

"$*" output ....

a b c d

从输出结果可以看出 "$*" 输出是一行而 "$@" 输出则是四行

4. 变量内容的删除与替换

我们在一些情况下,需要对变量中的字符窜进行查找删除或者替换,就需要使用下表列出的方法

相关文档
最新文档