常用shell脚本命.doc

上传人:cn****1 文档编号:560186542 上传时间:2023-03-21 格式:DOC 页数:40 大小:126.51KB
返回 下载 相关 举报
常用shell脚本命.doc_第1页
第1页 / 共40页
常用shell脚本命.doc_第2页
第2页 / 共40页
常用shell脚本命.doc_第3页
第3页 / 共40页
常用shell脚本命.doc_第4页
第4页 / 共40页
常用shell脚本命.doc_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《常用shell脚本命.doc》由会员分享,可在线阅读,更多相关《常用shell脚本命.doc(40页珍藏版)》请在金锄头文库上搜索。

1、1、显示包含文字aaa的下一行的内容: sed -n /aaa/n;p; filename2、删除当前行与下一行的内容: sed -i /aaa/N;d; filename3、 删除当前行与下两行的内容: sed -i /aaa/N;N;d; filename 依次类推,删除三行,则为N;N;N;d;,分析知:N为next4、得出以空格为分割的字符串中单词的个数,即统计个数: awk print NF 如显示字符串VALUE中的单词个数,其中VALUE为:aaa bbb ccc ddd ee f 则执行 echo $VALUE | awk print NF 后的结果为65、在linux中建立一

2、个文件与另一文件的链接, 即符号链接 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来通过

3、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原则.

4、1. 单引号和双引号的区别单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符 ,不会作变量的引用,直接输出字符窜。请看如下例子: rootlinux # name=HaHa rootlinux # echo $name HaHa rootlinux # myname=$name is wow rootlinux # echo $myname HaHa is wow rootlinux # myname=$name is wow rootlinux # echo $myname $name is wow 从上面例子可以看出,使用了单引号的时候,那么$name只是普通

5、字符,直接输出而已! 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来读入文件里的行时,会整行读入,不会关

6、注行的内容(空格.),所以比for读文件有更好的适用性, 推荐使用while循环读取文件3. bash shell 脚本中常用隐含变量$0当前执行的脚本或者命令名称$1-$9代表参数的位置. 举例 $1 代表第一个参数.$#脚本调用的参数的个数$所有参数的内容$*所有参数的内容$当前运行脚本的进程号$?命令执行后返回的状态$!后台运行的最后一个进程号注意: $? 用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错) $ 变量最常见的用途是用做暂存文件的名字以保证暂存文件不会重复。 $* 和 $ 如果输出是一样的,但是在使用for循环,在使

7、用 双引号()引用时 $* 会输出成一个元素 而 $ 会按照每个参数是一个元素方式输出 请看测试例子 #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. 变量内容的删除与替换我们在一些情况下,需要对变量中的字符窜进行查找删除或者替换,就需要使用下

8、表列出的方法变量设定方式说明$变量#关键字若变量内容从头开始的资料符合关键字,则将符合的最短资料删除$变量#关键字若变量内容从头开始的资料符合关键字,则将符合的最长资料删除$变量%关键字若变量内容从尾向前的资料符合关键字,则将符合的最短资料删除$变量%关键字若变量内容从尾向前的资料符合关键字,则将符合的最长资料删除$变量/旧字串/新字串若变量内容符合旧字串则第一个旧字串会被新字串取代$变量/旧字串/新字串若变量内容符合旧字串则全部的旧字串会被新字串取代举例如下(删除字符窜中的某个字符): rootlinux # export test_str=/usr/kerberos/sbin:/usr/k

9、erberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin rootlinux # echo $test_str#/*kerberos/bin: /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin5. 变量条件测试赋值在某些时刻我们需要判断某个变量是否存在,若变量存在则将此变量值赋值给新的变量,若变量不存在则将其他值赋值给新的变量.变量设定方式str 未定义str 为空字串str 已赋值为非空字串va

10、r=$str-exprvar=exprvar=var=$strvar=$str:-exprvar=exprvar=exprvar=$strvar=$str+exprvar=var=exprvar=exprvar=$str:+exprvar=var=var=exprvar=$str?exprexpr 输出至 stderrvar=var=$strvar=$str:?exprexpr 输出至 stderrexpr 输出至 stderrvar=$strvar=$str=exprvar=exprvar=var=$strvar=$str:=exprvar=exprvar=exprvar=$str举例如下:

11、 rootlinux # test_name= rootlinux # test_name=$test_name-root rootlinux # echo $test_name = 因为 test_name 被设定为空字符窜!所以当然还是保留为空字符窜! rootlinux # test_name=$test_name:-root rootlinux # echo $test_name root = 加上:后若变量内容为空或者是未设定,都能够以后面的内容替换!基本上这种变量的测试也能够透过 shell script 内的 if.then. 来处理,不过通过上述提及的简单的方法来测试变量,是程

12、序看起来更精简一些!6. shell 中分隔符 : 变量IFS 使用shell脚本中,如果使用for循环一个字符窜的话,默认使用空格来分割字符窜.还有前面所提到的 使用for循环逐行读取文件内容时候,文件行中如果有空格的话输出的结果也会变乱.这个时候 使用 IFS 变量来设置特定的字符窜分割符来,达到输出正确的目的.默认情况下 IFS 是使用 , 空格 t n 来作为默认的分割符的.我们将前面使用for逐行读取文件的例子 改进下就可以输出正确了,请看下面 #!/bin/bash IFS_old=$IFS #将原IFS值保存,以便用完后恢复 IFS=$n #更改IFS值为$n for line

13、in cat file.txt do echo $line donefile.txt 文件内容如下 rootlinux$ cat file.txt sdfsdfsdfsdf ssssss ssssss ssssss sssss sdfsdfsdfsdfsdf执行测试程序 输出结果如下(正确输出) rootlinux$ sh test.sh sdfsdfsdfsdf ssssss ssssss ssssss sssss sdfsdfsdfsdfsdf如果未设置IFS变量,使用默认的IFS变量值 ,输出结果如下 rootlinux$ sh test.sh sdfsdfsdfsdf ssssss ssssss ssssss sssss sdfsdfsdfsdfsdf从以上测试程序输出结果,可以根据自己的需求来设定 IFS变量,在举一个例子如下: while IFS=: read userName passWord userID groupID geCos homeDir userShell do echo $userName - $homeDir done /etc/pass

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号