shell之脚本练习
做一个需求流程图 需求分析-方案设计-具体实现 训练点 sed,echo,test,if,while,shift 1. 需求分析:练习test的-d 方案设计:体现的是思路,先定义一个变量,用条件去判断 具体实现: 输入:如下 [root@250-shiyan sh]# cat > mytest a=/root/sh/sed if [ -d $a ] then echo "$a is a directory" fi 输出:正确满意 [root@250-shiyan sh]# chmod u+x mytest [root@250-shiyan sh]# ./mytest /root/sh/sed is a directory 2. 需求分析:上一步虽然实现,但只有一个目录,并且是死的,不灵活。并且如果不是目录,没有相应的输出。 方案设计:把目录换成文件,加入非目录时的输出。 具体实现:用sed在命令行直接修改源文件。即可 要点:-e,多次编辑要用到。 输入:如下 [root@250-shiyan sh]# sed -i -e ‘s/sed/mem/‘ -e ‘/echo/a\\else echo "$a is a file"‘ mytest 输出:正确满意 [root@250-shiyan sh]# ./mytest /root/sh/mem is a file 3. 需求分析:将目录在脚本里定死,不方便,如何去在命令行传入文件名参数,这样就方便了。 方案设计: 具体实现:用sed在命令行直接修改源文件,注释掉第一行 输入:如下 [root@250-shiyan sh]# sed -i -e ‘1s/a/#&/‘ -e ‘s/\$a/\$1/‘ mytest [root@250-shiyan sh]# cat mytest #a=/root/sh/mem if [ -d $1 ] then echo "$1 is a directory" else echo "$1 is a file" fi 输出:正确满意 [root@250-shiyan sh]# ./mytest for for is a file [root@250-shiyan sh]# ./mytest awk awk is a directory 4. 需求分析:如果能在命令行测试多个文件或目录就好了 方案设计: 每次循环时加入一个条件判断即可,并相应输出。 具体实现:用while循环与shift来实现位置参数个数的不确定, 要点:until循环和while循环的结构基本相同,但是until是判断条件表达式为假时才继续循环! 难点: -n是用来测试字符串是否为空的 $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个 该变量包含了所有输入的命令行参数值。如果您运行showrpm openssh.rpm w3m.rpm webgrep.rpm 此时 $* 包含了 3 个字符串,即openssh.rpm, w3m.rpm and webgrep.rpm. 输入:如下 [root@250-shiyan sh]# vi mytest1 while [ -n "$*" ] do if [ -d $1 ] then echo "$1 is a directory" else echo "$1 is a file" fi shift done 输出:正确满意 [root@250-shiyan sh]# ./mytest1 awk for fr sed sel awk is a directory for is a file fr is a file sed is a directory sel is a file
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。