脚本需求集合贴-自主开发的
对频繁执行的任务有编写脚本的价值
对单次执行的任务就用笨的,简单的办法
1.对asterisk写一个脚本
查日志
输入日期--能够输出对应日期的日志
输入多个条件--能够输出and或者or的结果
2.修改配文,按行去弄
通过一个脚本可以修改多个配置文件
输入配置文件名,再输入行号,再输入操作类型,增删改查,再输入内容
验证输出结果是否正确。
做一个需求流程图
需求分析-方案设计-具体实现
训练点
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是用来测试字符串是否为空的
$# 位置参数的个数,shift后个数每次减1个。
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
该变量包含了所有输入的命令行参数值。如果您运行showrpm openssh.rpm w3m.rpm webgrep.rpm
此时 $* 包含了 3 个字符串,即openssh.rpm, w3m.rpm and webgrep.rpm.
输入:如下,第一行用while或until都可以
[root@250-shiyan sh]# vi mytest1
while [ -n "$*" ] 或者 until [ $# -eq 0 ]
do
if [ -d $1 ]
then
echo -e "