Linux--RH254---uint 11 Bash

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

2.创建新shell脚本:
1)创建包含bash命令的文本文件。文件的第一行应为:

#!/bin/bash    ##解释器,将脚本里的内容解释给内核,不可随意更改


2)使文件可执行
chmod +x scripts    ##添加可执行权限
3)将文件放置在用户的$PATH的目录中
~/bin – 用于用户的私有程序
/usr/local/bin – 本地开发、系统上的其他人使用的脚本
/usr/local/sbin - 本地开发、由root使用的脚本
直接运行脚本和使用source命令运行脚本是不同的!
脚本调试模式:
#!/bin/bash -x

#sh -x scripts



3.引用和转义
    引用和转义在shell解析字符串时用于去除字符串中特殊字符或保留词语的特殊含义。这会导致按字
面处理字符串,而不是展开变量或将其部分内容视作具有特殊含义。
    引用有三种类型:
    弱引用:
  将字符串放置在双引号中,保留字符串中所有字符的文字值,$、`、\和!字符除外。换言之,变量
扩展和命令扩展在双引号内仍起作用。

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

    转义:
  非引用的\是转义字符。它保留了下一个字符的文字值。(例如,\$PATH是确切的字符串$PATH,而
不是PATH变量的内容。)



4.Shell变量

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


5.命令替换

    命令替换在子shell中执行指定命令并用命令输出替换脚本中的命令替换。
    语法:
  $(shell command)

6.算术运算符
算术运算符指的是可以在程序中实现加、减、乘、除等数学运算的运算符。
operator     meaning
<VARIABLE>++     增量后
<VARIABLE>--     减量后
-         减法
+         加法
**         幂运算
*         乘法
/         除法
%         余数
+=        加等
-=        减等
Shell计算命令:
用$[]表示数学运算。

echo $[1+2]


用expr表示数学运算。

expr 1 + 2


用let指示数学运算。

let a=1+2;echo $a


用(())表示数学运算。bash内建功能,效率高。

for ((i=1;i<10;i++));do echo $i;done



7.Bash位置参数
    有两种简单的方法可以将用户输入读入bash中的变量。
    第一个方法是使用read提示用户输入(使用-p选项)并将其直接存储到一个或多个变量:
  交互式输入

  # read -p 'Enter your first and last name: ' FIRST LAST


    另一个方法是使用位置参数来读取传递给脚本的命令行参数或选项输入。各种特殊变量存储传递的选项编号Bash解析的个别参数或整个原始命令行。
  指定的位置参数总数:$#
  位置参数自身:$0、$1、$2、$3....
  所有位置参数: $@、$*
#!/bin/bash
echo \$1 is $1
echo \$2 is $2
echo \$3 is $3
echo \$* is $*
echo \$@ is $@
echo \$# is $#



8.退出状态

    Linux命令完成时,将返回退出状态。成功完成程序时,将返回0的推出状态。这被bash当作逻辑True值。非零退出状态通常表示发生了错误,并且被bash当作逻辑False值。
  例如:grep的退出状态的含义:
  0 – 在指定的文件中找到了模式
  1 – 在指定的文件中未找到模式
  >1 – 一些其他错误(无法打开文件、错误的搜索表达式等)
    推出状态的值被存储在"?"中,可以使用以下命令查看:
  # echo $?


######脚本######
1.检测1~10主机是否开机,开机则显示172.25.254.X is up,关机则显示172.25.254.X is down
A && B || C    ##A为真则执行B,为假则执行C
#!/bin/bash
for MUN in {1..10}
do
        ping -c1 -w1 172.25.254.$MUN &> /dev/null && echo 172.25.254.$MUN is up || echo 172.25.254.$MUN is down

done




2.添加/mnt/username中的用户
#!/bin/bash
for NAME in `cat $1`
do
        useradd $NAME

done



3.备份/etc/目录下以.conf结尾的所有文件,并且备份后的文件名为etcconfig-时间戳
#!/bin/bash
BACKDIR=etcconfig-`date +%Y-%m-%d-%S`
mkdir -p /mnt/$BACKDIR
cp /etc/*.conf /mnt/$BACKDIR



4.五秒倒计时

-n 不换行    -e 执行        \r 刷新
#!/bin/bash
for ((SEC=5;SEC>0;SEC--))
do
        echo -n After ${SEC}s is end
        echo -ne "\r    \r"
        sleep 1
done



5.1分10秒倒计时

-ge 大于等于    -gt 大于    -lt 小于    -a 并且
#!/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" -a "$MIN" -gt "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



6.备份数据库

#!/bin/bash
mkdir -p /mnt/DB_BACK/
for DB in `mysql -uroot -e "show databases;" -E -N | grep -E '\*|schema$' -v`
do
        DBNAME=$DB-`date +%Y-%m-%d-%S`
        echo "Backing up $DB"
        mysqldump $DB > /mnt/DB_BACK/$DBNAME
done
for DBNAME in `ls /mnt/DB_BACK/*`
do
        SIZE=`stat --print "%s\n" $DBNAME`
        echo $DBNAME\'s size is $SIZE byte

done



7.输入网段查看ip
#!/bin/bash
read -p "please give me a interface:" ip_show
echo `ifconfig ${ip_show} | grep inet | grep inet6 -v | awk -F ' ' '{print $2}'`



8.检测ip

#!/bin/bash
while [ "$#" -eq "0" ]
do
        echo "please give me a ip address!"
        exit 1
done
ping -c1 -w1 $1 >/dev/null && echo "$1 is up" || echo "$1 is down"



9.检测文件

#!/bin/bash
ls $1 &> /dev/null

[ "$?" -eq "0" ] && echo $1 is exist || echo $1 is not exist



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值