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:将使用的脚本内容显示到屏幕上