第22 章跳出循环-shift参数左移-函数使用

  1. 跳出循环break和continue

break概述:跳出当前循环体,执行循环体之后的语句,break后面不加参数,默认为break1,假设break 3 表示跳出第3层循环

continue概述:忽略本次循环剩余的代码,直接进行下次循环,contine 2表示忽略2次条件循环。

#!/bin/bash

while true

do

echo "*********"

echo "1 copy"

echo "2 delete"

echo "3 backup"

echo "4 quit"

echo "**********"

read op

case $op in

1)

continue #不会执行echo "copy"

echo "copy";;

2)

echo "delete";;

3)

echo "backup";;

4)

echo "exit"

break;; #break退出当前循环

*)

echo "please try again"

esac

done

  1. 使用交互式方法批量添加用户

#!/bin/bash

echo "******************************"

read -p "输入要创建的用户名:" name

read -p "输入要创建的用户数:" num

read -p "输入要创建用户密码:" pass

echo "******************************"

for ((i=1;i<=$num;i=i+1))

do

id $name$i &> /dev/null

if [ ! $? -eq 0 ];then

useradd $name$i &> /dev/null

echo "$pass" | passwd --stdin $name$i &> /dev/null

if [ $? -eq 0 ];then

echo "$name$i 创建成功"

else

echo "$name$i 创建失败"

fi

else

echo "$name$i exist"

fi

done

echo "创建用户完成,结果是..."

tail -$num /etc/passwd

  1. Shift参数左移指令

shift每执行一次,参数序列顺次左移一个位置,$#的值减1,用于分别处理每个参数,移出去的参数不再可用。

#!/bin/bash

if [ $# -le 0 ];then

        echo "没有足够的参数"

        exit

fi

 

sum=0

while [ $# -gt 0 ];do

        sum=$[$sum+$1]

        shift

#shift 2 一次移动2个参数

echo $#

done

echo result is $sum

  1. 函数的使用

一个脚本中有重名函数,则以最后一个函数为准。

function name(){

commands

}

name(){

commands

}

例1:return退出当前函数,并返回状态码(0-255)

vim funstion.sh

#!/bin/bash

fun_1(){

        echo "this is fun_1"

        return 3

        echo "我不执行"

}

fun_2(){

        echo "this is fun_2"

        return 2

}

 

fun_1

fun_2

 

sh function.sh

echo $? #结果为2,以脚本最后一个函数的状态码为准。

exit 是直接退出整个脚本,retrun是退出当前函数,并返回数字,并不退出脚本。

例2:函数值赋值给变量

#!/bin/bash

fun1(){

read -p "please input num:" num

echo $[$num*5]

}

num=$(fun1)

echo num is $num

# 输入5 ,结果为25

  1. 函数的参数传递

例1:通过脚本传递参数给函数中的位置参数$1

#!/bin/bash

fun1(){

rm -rf $1

}

fun1 $1

例2:调用函数时直接传递参数

#!/bin/bash

fun1(){

rm -rf $1

}

fun1 /root/a.txt

例3:函数中多参数传递和使用方法

#!/bin/bash

fun1(){

echo $[$1*5]

echo $[$2*2]

}

fun1 5 2 #直接传两个参数

例4:函数中变量的处理

函数中使用的变量类型有两种:局部变量,全局变量。

全局变量,默认情况下,你在脚本中定义的变量都是全局变量,你在函数外面定义的变量在函数内也可以使用。

#!/bin/bash

fun1(){

num1=$[$var1*2]

}

read -p "input a num:" var1

fun1

echo var1 new value is :

 

  1. 实战mysql自动化备份脚本

思路:

  1. 检查一下运行环境:目录存在,时间,权限,用户
  2. 运行要执行的命令:备份,导出数据
  3. 把命令执行过程中没有用的文件删除
  4. 弹出命令运行成功的消息

#!/bin/bash

#自动备份mysql脚本

 

#定义变量

BAKDIR=/data/backup/mysql/`date +%Y-%m-%d`

MYSQLDB=xuegod

#MYSQLDB=webapp

MYSQLUSR=root

#MYSQLUSER=backup

MYSQLPW=123456

#MYSQLPW=backup

 

#必须用root用户运行此脚本,$UID为系统变量

if

        [ $UID -ne 0 ];then

        echo 这脚本必须用root用户运行!!!

        sleep 2

        exit 0

fi

 

#判断目录是否存在,不存在则创建

if [ ! -d $BAKDIR ];then

        mkdir -p $BAKDIR

else

        echo $BAKDIR 已存在

        exit

fi

 

#使用mysqldump备份数据库

/usr/bin/mysqldump -u$MYSQLUSR -p$MYSQLPW $MYSQLDB > $BAKDIR/${MYSQLDB}_db.sql

cd $BAKDIR;tar -czf ${MYSQLDB}_db.tar.gz *.sql

 

#如果数据库备份成功,则打印成功,并删除备份目录30天以前的目录

[ $? -eq 0 ] && echo "This `date +%Y-%m-%d`MySQL BACKUP is success"

cd /data/backup/mysql && find . -type d -mtime +30 -exec rm -rf {} \;

echo "The mysql backup successfully"

  1. 实战nginx服务启动脚本

此nginx脚本使用了函数功能,让脚本具有更强的可读性

vim /etc/init.d/nginx

#!/bin/bash

#chkconfig:2345 80 90

#description:nginx run

 

#!/bin/bash

# nginx 启动脚本

# @author Andy

# @version 0.0.1

# @date 2020-08-01

PATH=/data/soft/nginx

DESC="nginx daemon"

NAME=nginx

DAEMON=$PATH/sbin/$NAME

CONFILE=$PATH/$NAME.pid

SCRIPTNAME=/etc/init.d/$NAME

[ -x "$DAEMON" ]||exit 0

do_start(){

        $DAEMON -c $CONFIGFILE || echo -n "nginx already running"

}

do_stop(){

        $DEAMON -s stop ||echo -n "nginx not running"

}

do_reload(){

        $DAEMON -s reload || echo -n "nginx can't reload"

}

case "$1" in

        start)

                echo -n "String $DESC:$NAME"

                do_start

                echo "."

        ;;

        stop)

                echo -n "Stopping $DESC: $NAME"

                do_stop

                echo "."

        ;;

        restart)

                echo -n "Restarting $DESC:$NAME"

                do_stop

                do_start

                echo "."

        ;;

        *)

                echo "Usage:$SCRIPTNAME{start|stop|reload|restart}" >&2

                exit 3

        ;;

esac

exit 0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值