常用shell脚本指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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. 变量内容的删除与替换
我们在一些情况下,需要对变量中的字符窜进行查找删除或者替换,就需要使用下表列出的方法