日期:2014-05-16  浏览次数:20752 次

鸟哥的Linux私房菜-基础学习篇7

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