fedora linux 脚本case语句,bash编程之case语句

一、语法格式

case 变量引用(${}) in

value1)    #变量的值是value1,则执语句1,语句2,······

语句1

语句2

······

;;    #每个分支结束时都需要以双分号结尾

value2)    #变量的值是value2,则执语句3,语句4,······

语句3

语句4

······

;;

value3)    #变量的值是value3,则执语句5,语句6,······

语句5

语句6

······

;;

*)    #其他任意情况,则执行语句7,语句8,······;支持字符通配globbing,*为任意长度的任意字符;支持star|Star)这类格式;不支持正则表达式

语句7

语句8

······

;;

esac    #语句以esac结束

二、练习

示例1:写一个脚本,能接受参数gzip、bzip2或xz,而后能将/etc/目录归档备份至/backup目录,并以参数指定的形式压缩存放;文件名称包含脚本执行时刻的时间#!/bin/bash

# Date: 2015-04-12

# Description:

# Version: 1.0

if [ ! -e /backup ];then    #这里可以用[ -d /backup ] || mkdir /backup 替代

mkdir /backup

fi

Command=$1

if [ -z $1 ]; then    #如果脚本给定的是空值,则默认输入gzip

Command=gzip

fi

if [ $Command == gzip ];then

tar czfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.gz /etc/

[ $? -eq 0 ] && echo "Backup etc successfully.(gzip)"

elif [ $Command == bzip2 ];then

tar cjfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.bz2 /etc/

[ $? -eq 0 ] && echo "Backup etc successfully.(bzip2)"

elif [ $Command == xz ];then

tar cJfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.xz /etc/

[ $? -eq 0 ] && echo "Backup etc successfully.(xz)"

else

echo "Usage:`basename $0`{gzip | bzip2 | xz }."

exit 5

fi

练习1:用case语句完成示例1要求

脚本1:#!/bin/bash

# Date: 2015-04-12

# Description:

# Version: 1.0

if [ ! -e /backup ];then    #这里可以用[ -d /backup ] || mkdir /backup 替代

mkdir /backup

fi

Command=$1

if [ -z $1 ]; then    #如果脚本给定的是空值,则默认输入gzip

Command=gzip

fi

case $Command in

gzip)

tar czfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.gz /etc/

[ $? -eq 0 ] && echo "Backup etc successfully.(gzip)"

;;

bzip2)

tar cjfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.bz2 /etc/

[ $? -eq 0 ] && echo "Backup etc successfully.(bzip2)"

;;

xz)

tar cJfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.xz /etc/

[ $? -eq 0 ] && echo "Backup etc successfully.(xz)"

;;

*)

echo "Usage:`basename $0`{gzip | bzip2 | xz }."

exit 5

;;

esac

脚本2:#!/bin/bash

# Date: 2015-04-12

# Description:

# Version: 1.0

if [ ! -e /backup ];then    #这里可以用[ -d /backup ] || mkdir /backup 替代

mkdir /backup

fi

Command=$1

if [ -z $1 ]; then    #如果脚本给定的是空值,则默认输入gzip

Command=gzip

fi

case $Command in

gzip)

tar czfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.gz /etc/

Ret=$?

;;

bzip2)

tar cjfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.bz2 /etc/

Ret=$?

;;

xz)

tar cJfP /backup/backupfile-`date +%F-%H-%M-%S`.tar.xz /etc/

Ret=$?

;;

*)

echo "Usage:`basename $0`{gzip | bzip2 | xz }."

exit 5

;;

esac

[ $Ret -eq 0 ] && echo "Backup etc successfully.($Command)"    #通过每个循环分支的返回值

示例2:写一个脚本:可以接受一个参数,其使用形式如下:

script.sh {start|stop|restart|status}

如果参数为start,创建空文件/var/lock/subsys/script,并显示“Starting script successfully.”;

如果参数为stop,则删除文件/var/lock/subsys/script,并显示“Stop script finished.”;

如果参数为restart,则删除文件/var/lock/subsys/script后重新创建,并显示“Restarting script successfully.”;

如果参数为status,那么:

如果/var/lock/subsys/script文件存在,则显示为“script is running.”

否则,则显示为“script is stopped.”

其它任何参数:则显示“script.sh {start|stop|restart|status}”#!/bin/bash

# Date: 2015-04-13

# Author: ArvinLau

# Description:

# Version: 1.0

FileName=`basename $0`

FilePath="/var/lock/subsys/$FileName"    #变量替换,使用双引号

if [ $# -lt 1 ]; then

echo "Usage:$0 {start | restart | stop | status}"

exit 5

fi

if [ $1 == start ]; then

touch $FilePath

echo "Starting $FileName successfully."

elif [ $1 == stop ]; then

rm -f $FilePath

echo "Stop script finished."

elif [ $1 == restart ]; then

rm -f $FilePath

touch $FilePath

echo "Restarting script successfully."

elif [ $1 == status ]; then

if [ -e $FilePath ]; then

echo "Script is running."

elif [ ! -e $FilePath ]; then

echo "Script is stopped."

fi

else

echo "Usage:$0 {start | restart | stop | status}"

exit 7

fi

练习2:用case语句完成示例2的要求#!/bin/bash

# Date: 2015-04-13

# Author: ArvinLau

# Description:

# Version: 1.0

FileName=`basename $0`

FilePath="/var/lock/subsys/$FileName"    #变量替换,使用双引号

if [ $# -lt 1 ]; then

echo "Usage:$0 {start | restart | stop | status}"

exit 5

fi

case $1 in

start)

touch $FilePath

echo "Starting $FileName successfully." ;;

stop)

rm -f $FilePath &> /dev/null

echo "Stop script finished." ;;

restart)

rm -f $FilePath &> /dev/null

touch $FilePath

echo "Restarting script successfully." ;;

status)

if [ -e $FilePath ]; then

echo "Script is running."

else

echo "Script is stopped."

fi

*)

echo "Usage:$0 {start | restart | stop | status}"

exit 7 ;;

esac

练习3:判断当前Linux发行版是RedHat,Fedora,CentOS还是其他,

方法:取得/etc/issue文件第一行的第一个单词后进行比较#!/bin/bash

# Date: 2015-04-13

# Author: ArvinLau

# Description:

# Version: 1.0

Name=`head -1 /etc/issue | cut -d' ' -f1`

case $Name in

CentOS)

echo "The system is $Name." ;;

Fedora)

echo "The system is $Name." ;;

RedHat)

echo "The system is $Name." ;;

*)

echo "The system is $Name or Unknown system."

;;

esac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值