Bash Scripts(Bash 脚本)I

Bash脚本基础

BASH = GNU Bourne-Again Shell,BASH 是 GNU 组织开发和推广的一个项目。
Bash脚本类似批处理,简单来讲就是把许多的指令集合在一起,并提供循环、条件、判断等重要功能,语法简单实用,用以编写程序,大大简化管理员的操作,并可以完成图形工具所无法实现的功能。

如何创建新shell脚本

  1. 创建包含bash命令的文本文件。文件的第一行应为:
    #!/bin/bash ##解释器
  2. 使文件可执行(使用chmod +x scripts)
  3. 将文件放置在用户的$PATH的目录中
    ~/bin – 用于用户的私有程序
    /usr/local/bin – 本地开发、系统上的其他人使用的脚本
    /usr/local/sbin - 本地开发、由root使用的脚本
    直接运行脚本和使用source命令运行脚本是不同的!

引用和转义

(1)弱引用—-” ”
将字符串放置在双引号中,保留字符串中所有字符的文字值,$、`、\和!字符除外

[root@localhost mnt]# echo "date"   ##显示date字符
date
[root@localhost mnt]# TIME=`date`   ##``$(),表示优先执行的命令,这里是给变量TIME定义
[root@localhost mnt]# echo "$TIME" ##显示TIME变量
Tue Jun 20 08:35:07 EDT 2017
[root@localhost mnt]# echo "`date`" ##显示当前时间
Tue Jun 20 08:35:29 EDT 2017

这里写图片描述

(2)强引用
将字符串放置在单引号中,保留字符串中所有字符的文字值,同时禁用所有扩展

[root@localhost mnt]# echo '`date`' ##显示`date`字符,这里``由于强引所以仅为字符
`date`

这里写图片描述

(3)转义
非引用的\是转义字符。它保留了下一个字符的文字值。

[root@localhost ~]# echo `date`    ##没有转义的
Tue Jun 20 08:44:47 EDT 2017
[root@localhost ~]# echo \`date\`  ##转义后的
`date`

这里写图片描述

Shell变量

shell变量用于为稍后在脚本中使用的名称指定值,并且仅限于shell命令行或从中声明变量的脚本。
!!!定义的变量一般为大写字母。
若要定义或指定值:
FRUIT=apple
若要参考或使用变量:
$FRUIT
${FRUIT}

[root@localhost ~]# TIME=`date`        ##定义变量
[root@localhost ~]# echo $TIME        ##使用变量
Tue Jun 20 08:49:19 EDT 2017
[root@localhost ~]# echo "the time is ${TIME}"    ##使用变量
the time is Tue Jun 20 08:49:19 EDT 2017

这里写图片描述

算术运算符

算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。

++ 增量后
– 减量后
- 减法
+ 加法
** 幂运算
* 乘法
/ 除法
% 余数
+= 加等
-= 减等

[root@localhost ~]# let A=1+2  ##加法
[root@localhost ~]# echo $A
3
[root@localhost ~]# let A=1-2  ##减法
[root@localhost ~]# echo $A
-1
[root@localhost ~]# let A=2*3  ##乘法
[root@localhost ~]# echo $A
6
[root@localhost ~]# let A=2**3 ##幂运算
[root@localhost ~]# echo $A
8
[root@localhost ~]# let A=10/5 ##除法
[root@localhost ~]# echo $A
2
[root@localhost ~]# let A=6%5  ##求余数
[root@localhost ~]# echo $A
1
[root@localhost ~]# let A+=1   ##A+=1即A=A+1(由上一步运算已知A=1)
[root@localhost ~]# echo $A
2
[root@localhost ~]# let A-=4   ##A-=4即A=A-4(由上一步运算已知A=2)
[root@localhost ~]# echo $A
-2

这里写图片描述

Shell计算命令

用$[]表示数学运算
用expr表示数学运算
用let指示数学运算
用(())表示数学运算。bash内建功能,效率高

[root@localhost ~]# echo $[2+4]
6
[root@localhost ~]# echo `expr 2*4`
2*4
[root@localhost ~]# echo `expr 1+2`
1+2
[root@localhost ~]# let A=2+4
[root@localhost ~]# echo $A
6

这里写图片描述

循环

for循环用于值列表中的相同命令的重复。
(1)
for 变量名 in 列表值
do
操作
done ##表示结束

[root@localhost ~]# for NUM in 1 hello 2 westos 3 lee;do echo $NUM;sleep 1 ;done  ##这里sleep 1表示1秒执行一次
1
hello
2
westos
3
lee

这里写图片描述

(2)循环与计算的结合
for (())
do

done
这是一个类似C语言的for循环,它实现数值的读取以及数值的运算((数值起始;数值终止;数值运算))

[root@localhost ~]# for ((i=1;i<10;i++));do echo $i;done
1
2
3
4
5
6
7
8
9

这里写图片描述

脚本示例

test.sh主机检测

脚本test.sh实现检测主机是否在运行,是则显示up,否显示down
ping -c1 -w1 , -c1 表示ping的次数为1次,-w1表示结束次数

#!/bin/bash
for NUM in 172.25.254.{1..10};
do ping -c1 -w1  $NUM &>/dev/null && echo $NUM is up || echo $NUM is down 
done

这里写图片描述

测试:
这里写图片描述

date.sh倒计时

date.sh
实现5秒的倒计时

#!/bin/bash
for ((i=5;i>0;i--))
do echo $i;
sleep 1;
done

这里写图片描述

测试:
这里写图片描述

time.sh倒计时

实现1分10秒的倒计时
1)分钟不变,秒–
2)分=0,秒=0,结束倒计时
3)分!=0,秒=0,分–,秒変59,秒–

#!/bin/bash
MIN=1
for ((SEC=10;SEC>=0;SEC--))
do
        while [ "$SEC" -eq "0" -a "$MIN" -eq "0" ]
        do
                echo "Time is end               "
                exit 0
        done

        while [ "$SEC" -eq "0" ]
        do
                echo -n "after ${MIN}m${SEC}s is end"
                sleep 1
                echo -ne "\r    \r"
                ((MIN--))
                SEC=59
        done

        echo -n "after ${MIN}m${SEC}s is end            "
        echo -ne "\r    \r"
        sleep 1
done

这里写图片描述

测试:
这里写图片描述

这里写图片描述

conf.sh文件查找

查找/etc目录下以.conf结尾的文件,并复制到/etcconfig-当前时间 目录下
date +%F-%S ——%F表示full date; same as %Y-%m-%d,%S表示秒

#!/bin/bash
a=`date +%F-%S`
mkdir /etconfig-$a
cp /etc/*.conf /etconfig-$a

这里写图片描述

测试:
这里写图片描述

create_user.sh建立用户

根据/mnt/userfile建立用户
若用户存在则显示the user is existed

#!/bin/bash
for USER in `cat /mnt/username`
do
useradd $USER &>/dev/null && echo "successful" || echo "$USER is  existed";
done

这里写图片描述

测试:
这里写图片描述

check_file文件存在确认

检测文件或目录的存在

#!/bin/bash
ls $1 &> /dev/null && echo "the $1 is existed" || echo "the file is not existed"

这里写图片描述

测试:
这里写图片描述

数据库备份

备份数据库并保存到相应目录,备份的文件要有时间戳,且显示文件的大小

#!/bin/bash
mkdir /mnt/dbdir &> /dev/null
for DB in `mysql -uroot -pwestos -e "show databases;" -N -E | grep -E '\*|schema$' -v`
do
        echo "Backing up $DB"
        mysqldump -u root -pwestos $DB > /mnt/dbdir/$DB-`date +%F`.sql

done

for DBDUMB in /mnt/dbdir/*
do
        SIZE=`stat --print "%s\n" $DBDUMB`
        echo ""
        echo "$DBDUMB's size is $SIZE"
done

这里写图片描述

测试:
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值