首页 > 系统服务 > 详细

Linux学习-10-学习shell scripts

时间:2015-07-17 23:08:01      阅读:686      评论:0      收藏:0      [点我收藏+]

[root@www ~]# mkdir scripts; cd scripts 

[root@www scripts]# vi sh01.sh

#!/bin/bash                宣告shell名称

# Program:                 程序内容说明

# This program shows "Hello World!" in your screen.   

# History: 

# 2005/08/23 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin   主要环境变量宣告

export PATH                           

echo -e "Hello World! \a \n"         主要程序部分

exit 0            执行成果回传值



执行:chmod a+x sh01.sh; ./sh01.sh


交互式脚本

[root@www scripts]# vi sh02.sh 

#!/bin/bash 

# Program: 

# User inputs his first name and last name. Program shows his full name. 

# History: 

# 2005/08/23 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 

export PATH 

read -p "Please input your first name: " firstname # 提示使用者输入 

read -p "Please input your last name: " lastname # 提示使用者输入 

echo -e "\nYour full name is: $firstname $lastname" # 结果由屏幕输出


随日期变化

[root@www scripts]# vi sh03.sh 

#!/bin/bash 

# Program: 

# Program creates three files, which named by user‘s input 

# and date command. 

# History: 

# 2005/08/23 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 

export PATH

# 1. 让使用者输入文件名,并取得 fileuser 这个变量; 

echo -e "I will use ‘touch‘ command to create 3 files." # 纯粹显示信息 

read -p "Please input your filename: " fileuser # 提示使用者输入

 # 2. 为了避免使用者随意按 Enter ,利用变量功能分析档名是否有设定? 

filename=${fileuser:-"filename"} # 开始判断有否配置文件名 

# 3. 开始利用 date 指令来取得所需要的档名了; 

date1=$(date --date=‘2 days ago‘ +%Y%m%d) # 前两天的日期 

date2=$(date --date=‘1 days ago‘ +%Y%m%d) # 前一天的日期 

date3=$(date +%Y%m%d) # 今天的日期 

file1=${filename}${date1} # 底下三行在配置文件名 

file2=${filename}${date2} 

file3=${filename}${date3} 

# 4. 将档名建立吧!

touch "$file1" # 底下三行在建立档案

touch "$file2" 

touch "$file3"


数值运算

[root@www scripts]# vi sh04.sh 

#!/bin/bash 

# Program: 

# User inputs 2 integer numbers; program will cross these two numbers. 

# History: 

# 2005/08/23 VBird First release PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin 

export PATH 

echo -e "You SHOULD input 2 numbers, I will cross them! \n" 

read -p "first number: " firstnu 

read -p "second number: " secnu 

total=$(($firstnu*$secnu)) 

echo -e "\nThe result of $firstnu x $secnu is ==> $total"

[root@www scripts]# echo $(( 13 % 3 )) 

1


test测试功能

test -e /dmtsai && echo "exist" || echo "Not exist"

P453


# 1. 让使用者输入档名,并且判断使用者是否真的有输入字符串?

 echo -e "Please input a filename, I will check the filename‘s type and \

 permission. \n\n" 

read -p "Input a filename : " filename 

test -z $filename && echo "You MUST input a filename." && exit 0


# 2. 判断档案是否存在?若不存在则显示讯息并结束脚本 

test ! -e $filename && echo "The filename ‘$filename‘ DO NOT exist" && exit 0 


# 3. 开始判断文件类型与属性 

test -f $filename && filetype="regulare file" 

test -d $filename && filetype="directory" 

test -r $filename && perm="readable" 

test -w $filename && perm="$perm writable" 

test -x $filename && perm="$perm executable" 


# 4. 开始输出信息!

echo "The filename: $filename is a $filetype" 

echo "And the permissions are : $perm"


利用判断符号[]

[□"$HOME"□==□"$MAIL"□]

[要加空格]

read -p "Please input (Y/N): " yn 

[ "$yn" == "Y" -o "$yn" == "y" ] && echo "OK, continue" && exit 0

[ "$yn" == "N" -o "$yn" == "n" ] && echo "Oh, interrupt!" && exit 0

echo "I don‘t know what your choice is" && exit 0

默认变量$0 $1 P457

shift偏移变量


条件判断式 if...then

if [ 条件判断式 ]; then 当条件判断式成立时,可以进行的指令工作内容; 

fi <==将 if 反过来写,就成为 fi 啦!结束 if 之意!

多条件

 && 代表 AND ;

 || 代表 or ;

上个例子修改为单一条件判断

read -p "Please input (Y/N): " yn 

if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then 

echo "OK, continue" 

exit 0 

fi 

if [ "$yn" == "N" ] || [ "$yn" == "n" ]; then 

echo "Oh, interrupt!" 

exit 0 

fi 

echo "I don‘t know what your choice is" && exit 0


# 一个条件判断,分成功进行与失败进行 (else) 

if [ 条件判断式 ]; then 

当条件判断式成立时,可以进行的指令工作内容; 

else 

当条件判断式不成立时,可以进行的指令工作内容; 

fi

# 多个条件判断 (if ... elif ... elif ... else) 分多种不同情况执行 

if [ 条件判断式一 ]; then 

当条件判断式一成立时,可以进行的指令工作内容; 

elif [ 条件判断式二 ]; then 

当条件判断式二成立时,可以进行的指令工作内容;

else 

当条件判断式一与二均不成立时,可以进行的指令工作内容; 

fi

多条件判断

read -p "Please input (Y/N): " yn 

if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then 

echo "OK, continue" 

elif [ "$yn" == "N" ] || [ "$yn" == "n" ]; then 

echo "Oh, interrupt!" 

else 

echo "I don‘t know what your choice is" 

fi

=====================================

# 1. 先作一些告知的动作而已~ 

echo "Now, I will detect your Linux server‘s services!" 

echo -e "The www, ftp, ssh, and mail will be detect! \n"

# 2. 开始进行一些测试的工作,并且也输出一些信息啰!

testing=$(netstat -tuln | grep ":80 ") # 侦测看 port 80 在否? 

if [ "$testing" != "" ]; then echo "WWW is running in your system." 

fi 

testing=$(netstat -tuln | grep ":22 ") # 侦测看 port 22 在否? 

if [ "$testing" != "" ]; then 

echo "SSH is running in your system." 

fi 

testing=$(netstat -tuln | grep ":21 ") # 侦测看 port 21 在否? 

if [ "$testing" != "" ]; then 

echo "FTP is running in your system." 

fi

testing=$(netstat -tuln | grep ":25 ") # 侦测看 port 25 在否? 

if [ "$testing" != "" ]; then 

echo "Mail is running in your system." 

fi

利用case ...esac

case $变量名称 in <==关键词为 case ,还有变数前有钱字号 

"第一个变量内容") <==每个变量内容建议用双引号括起来,关键词则为小括号 ) 

程序段

 ;;             <==每个类别结尾使用两个连续的分号来处理! 

"第二个变量内容") 

程序段

 ;; 

*)           <==最后一个变量内容都会用 * 来代表所有其他值 

不包含第一个变量内容与第二个变量内容的其他程序执行段

 exit 1

 ;; 

esac        <==最终的 case 结尾!『反过来写』思考一下!


case $1 in 

"hello") 

echo "Hello, how are you ?"

 ;;

 "") 

echo "You MUST input parameters, ex> {$0 someword}"

 ;;

 *) # 其实就相当于通配符,0~无穷多个任意字符之意!

 echo "Usage $0 {hello}" 

;;

 esac


function功能

function fname() {

 程序段

 }

loop循环

while do done, until do done 不定循环

while [ condition ] <==中括号内的状态就是判断式 

do <==do 是循环的开始! 

程序段落

done <==done 是循环的结束


until [ condition ] 

do 

程序段落 

done

for...do...done (固定循环)

for var in con1 con2 con3 ... 

do 

程序段

 done

for...do...done 的数值处理

for ((初始值; 限制值; 执行步阶 ))

 do 

程序段 

done

shell script 的追踪与 debug



Linux学习-10-学习shell scripts

原文:http://koishi.blog.51cto.com/4885806/1675639

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!