码迷,mamicode.com
首页 > 系统相关 > 详细

shell之脚本练习

时间:2015-01-16 11:16:27      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

 

做一个需求流程图

需求分析-方案设计-具体实现

训练点
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

 

shell之脚本练习

标签:

原文地址:http://www.cnblogs.com/createyuan/p/4228068.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!