bash 是一个为GNU计划编写的Unix shell。它的名字是一系列缩写:Bourne-Again SHell — 这是关于Bourne shell(sh)的一个双关语(Bourne again / born again)。Bourne shell是一个早期的重要shell,由史蒂夫·伯恩在1978年前后编写,并同Version 7 Unix一起发布。bash则在1987年由布莱恩·福克斯创造。在1990年,Chet Ramey成为了主要的维护者。

shell  脚本

脚本语言

不需要编译 由解释器执行

        弱类型:变量类型

        通常不通事先声明


bash 变量类型 :本地变量 局部变量 环境变量  位置变量 特殊变量

bash  脚本:

              # bash  XXX   /path/to/script_file.sh

独立执行

   1  要有执行权限

   2  定义好shebang 即脚本的第一行  #!/path/to/explainer  例如 /bin/bash  /usr/bin/python


bash 的配置文件 :

   profile 类   /etc/profile   /etc/profile.d/*.sh   ~/.bash_profile

     声明环境变量

     执行程序或脚本

   bashrc 类   /etc/bashrc  ~/.bashrc

    定义本地变量

    定义命令别名


脚本文件中 所有#号开头的行均为注释行  不会被执行  


检查脚本的语法错误   不执行脚本

          bash -n  /path/to/scripe_file.sh


调试执行脚本:

          bash -x  /path/to/scripe_file.sh


控制语言  

           bash  循环控制语句

                     for

                     while

                     until



简单脚本编写  vim  垂直打开三个.sh 文件


#!/bin/bash

vim -O /cal.sh /sum.sh /touch.sh


200536936.png



bash 的 for循环:

            事先提供一个元素列表  而后 使用变量去遍历此元素列表     每访问一个元素 就执行一次循环体  直到元素访问完毕

用法格式 :

   for  VAR_NAME  in(元素列表)  元素1  元素2   ...     ; do  如果写在和for同一行必须得分号隔开

   do(循环体开始)

   语句1

   语句2

   ...

   done  (循环结束)



创建多个目录 并且全部删除

#!/bin/bash

for mkdir in /tmp/1.dir /tmp/2.dir /tmp/3.dir; do

mkdir  $mkdir

done


for rm  in /tmp/1.dir /tmp/2.dir /tmp/3.dir; do

rm -rf $rm

done

200754208.png


bash 判断:

单分支if语句

     if 条件  then

              语句1

              语句2

     fi              



如果用户存在 就说明其存在

#!/bin/bash

UserName=user1

if id $UserName &> /dev/null

then

echo "$UserName exists"

fi


200841192.png



双分支if语句

if  条件

then

语句1

语句2

......

else

语句1

语句2

......

fi


如果知道的用户存在  先说明其已经存在  并显示其ID号和SHELL  否则  就添加用户 并显示其ID号

#!/bin/bash

UserName=user1

if id $UserName &> /dev/null

then

echo "$UserName exists"

grep "^$UserName:" /etc/passwd | cut -d: -f3,7

else

useradd $UserName

grep "^$UserName:" /etc/passwd | cut -d: -f3

fi


200855581.png