1.bash是命令行用户接口,我们去查看一下每个用户登录启动的命令
我们看到root登录的时候就会自动运行 /bin/bash
2.变量
(1)环境变量
作用域:在bash及其子bash中都是有效的
用法:export 名称=值
例子:vi /etc/skel/.bash_profile
(2)本地变量
作用域:只属于某一个bash,整个bash的进程
用法:名字=值 或者是 var 名字=值
(3)局部变量
作用域:当前代码段
用法:local var 名字=值
(4)位置变量
用于脚本执行的参数,$1代表第一个参数,$2第二个,以此类推
(5)特殊变量
$? 上一个命令执行的状态的返回值
命令的执行有两种返回,一种是命令执行的结果和命令执行的状态,状态会存在特殊变量$?中
0代表成功执行,非1-255代表失败。
$# 脚本传参的个数
3.输出重定向
> 覆盖重定向
>> 追加重定向
2> 错误信息覆盖重定向
2>> 错误信息追加重定向
&>> 全部重定向
在dev下的null为黑洞设备任何信息重定向到这个设备中都无法找回
这个设备是字符设备
查看变量:set 展示环境变量和局部变量等
查看环境变量:printenv或者env或者export
5.引用变量
${变量名} {}可以省略,但是在后面加字符的时候不能省略
比如:
6.echo
''代表字符串,强引用,""如果引种变量的情况会取引用的变量的值,弱引用
``命令替换
7.增加用户,不输出执行结果,指定用户名和密码
#!/bin/bash
#
if [ $# -eq 2 ]
then useradd $1
echo $2 | passwd --stdin $1 &>/dev/null
echo "useradd success"
else
echo "args is not 2"
fi
8.条件逻辑判断
(1)条件表达式
[exception] 表达式和中括号之间必须有空格
或者 test exception
#!/bin/bash
2
3 C=`wc -l /etc/inittab | cut -d' ' -f1`
4 if [ $C -gt 20 ] ;then
5 echo "big file"
6 else
7 echo "small file"
8 fi
(2)整数比较
-eq 是否相等 [ $A -eq $B ]
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
(3)逻辑表达式
&& 逻辑与
|| 逻辑或
! 逻辑非
例子:如果一个用户不存在才进行添加用户
#!/bin/bash
id $1 &>/dev/null && echo "User $1 is exist" && exit 1
id $1 &>/dev/null || useradd $1
id $1 &>/dev/null && echo $2 | passwd --stdin $1 &>/dev/null && echo "User $1 add success"
(4)逻辑与和逻辑或
-a 逻辑与
-o 逻辑或
(5)算术运算
let表达式:let C=$A + $B
用$[]:$[$A+$B]
(6)时间
date +%s 取当前时间的秒数
(7)修改用户的最大使用天数
chage -M 9 root 修改root最大的使用天数
综合训练:
如果用户的密码的差7天到期就要提醒
9.循环遍历
练习:对所有的用户 hello 用户名
1 #!/bin/bash
2 #
3 C=`wc -l /etc/passwd | cut -d' ' -f1`
4 for I in `seq $C`;do
5 UN=`head -$I /etc/passwd | tail -1 |cut -d: -f1`
6 BS=`head -$I /etc/passwd | tail -1 |cut -d: -f7`
7 echo -e "hello $UN, \t Your shell is $BS"
8 done