日期:2014-05-16 浏览次数:20856 次
39.Shell脚本
自动化管理的重要依据
追踪与管理系统的重要工作
简单的入侵检测功能
连续命令单一化
简单的数据处理
?
例1:第一个脚本
vi sh01.sh
#!/bin/bash
echo $PATH
echo -e "Hello World! \a \n"
exit 0
?
chmod a+x sh01.sh
sh sh01.sh 或./sh01.sh
?
例2:变量内容由用户决定
vi sh02.sh
#!/bin/bash
read -p "Please input your first name: "?firstname
read -p "Please input your last name: " lastname
echo -e "\nYour full name is : $firstname $lastname"
?
例3:利用date建立文件
vi sh03.sh
#!/bin/bash
#1.让用户输入文件名称,并获取fileuser变量
echo -e "I will use 'touch' command to create 3 files."
read -p "Please input the filename what you want : " fileuser
#2.为了避免用户随意按Enter,使用变量分析是否设置了文件名?
filename=${fileuser:-"filename"}
#3.开始使用date命令来获取所需要的文件名
date1=`date --date='2 days ao' +%Y%m%d`
date2=`date --date='1 days ao' +%Y%m%d`
date3=`date +%Y%m%d`
file1="filename""date1"?
file2="filename""date2"
file3="filename""date3"
#4.建立文件名
touch $file1
touch $file2
touch $file3
?
40.使用test命令的测试功能
#test -e filename :该文件名是否存在
#test -f filename? :该文件名是否为文件
#test -d filename :该文件名是否为目录
#test -rwx filename
?
例4:使用test、&&和||
vi sh04.sh
#!/bin/bash
#1.让用户输入文件名,并判断用户是否真的输入了字符串
echo -p "Input a filename : " filename
test -z $filename && echo "You must input a filename. " && exit 0
#2.判断文件是否存在
test ! -e $filename && "The filename $filename do not exist " && exit 0
#3.开始判断文件类型与属性
test -f $filename && filetype="regular file"
test -d $filename && filetype="regular file"
#4.开始输出信息
echo "The filename : $filename is a $filetype"
?
41.使用判断符号[]
[? $name ?==? "VBird"??]? 注意空格
?
42.Shell脚本的默认变量($0,$1,$2...)
#/path/to/scriptname opt1 opt2 opt3 ...
$0???????????????????????????????$1???? $2??? $3
?
43.条件判断
if [??条件判断表达式 ?]; then
????? 条件表达式成立时,可以执行的命令
fi
?
if [??条件判断表达式 ?]; then
????? 条件表达式成立时,可以执行的命令
else
????? 条件表达式不成立时,可以执行的命令
fi
?
if [??条件判断表达式1 ?]; then
????? 条件表达式1成立时,可以执行的命令
elif [??条件判断表达式2 ?]; then
????? 条件表达式2成立时,可以执行的命令
else
????? 条件表达式不成立时,可以执行的命令
fi
?
case $变量名称 in
????? "第一个变量内容")
???????????? 程序段
???????????? ;;
????? "第二个变量内容")
???????????? 程序段
???????????? ;;
????? *)
???????????? 程序段
???????????? exit 1
???????????? ;;
esac
?
44.使用函数功能
函数在shell脚本中类似与自定义的执行命令,最大的功能是简化了很多程序代码
function fname(){
????? 程序段
}
?
vi sh05.sh
#!/bin/bash
function printit(){
????? echo "Your choice is $1"
}
case $1 in
??? "one")
????????? printit 1
????????? ;;
??? "two")
????????? printit 2
????????? ;;
???? "three")
????????? printit 3
??????????;;
????? *)
????????? echo "Usage {one|two|three}"
????????? ;;
esac
?
sh sh05.sh one
?
45.循环
while [? condition??]
do
???? 程序段
done
?
until?[? condition??]
do
???? 程序段
done
?
for ((? 初始值;限制值;执行步长??))
do
???? 程序段
done
?
s=0
for ((? i=1; i<=100; i=i+1?))
do
???? s=$(($s+$i))
done
?
for var in con1 con2 con3 ...
do
???? 程序段
done
?
46.Shell脚本的追踪与调试
#sh [-nvx] scripts.sh
-n:不执行脚本,仅检查语法错误
-v:在执行脚本前,先将脚本的内容输出到屏幕上
-x:将使用的脚本内容显示到屏幕上?