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
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
bash 判断:
单分支if语句
if 条件 then
语句1
语句2
fi
如果用户存在 就说明其存在
#!/bin/bash
UserName=user1
if id $UserName &> /dev/null
then
echo "$UserName exists"
fi
双分支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
转载于:https://blog.51cto.com/wyhhand/1346087