shell 内核与用户之间的解释程序
/bin/bash 常用解释器
/bin/sh
/bin/bash
/sbin/nologin(用户无法登陆)
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
shell脚本写好可执行的语句,完成特定任务的文件
按顺序、批量化处理
编写规范
1、声明解释器 #!/bin/bash
2、编写注释 #(脚本功能,作者信息,,,,)
3、执行指令
shell脚本以 .sh结尾
脚本执行方式
1、添加x权限 绝对(/opt/test01.sh)或相对(./)路径执行
vim test01.sh
[root@svr7 opt]# cat test01.sh
#!/bin/bash
#测试脚本
echo hello world
echo 123
[root@svr7 opt]# chmod u+x test01.sh
[root@svr7 opt]# ll test01.sh
-rwxr--r--. 1 root root 52 5月 6 10:19 test01.sh
[root@svr7 opt]# /opt/test01.sh
hello world
123
2、解释器执行脚本,不需要x权限(产生子进程执行脚本)
bash test01.sh
3、使用source命令执行脚本,无需x权限(父进程执行脚本)
脚本用非交互式指令
#!/bin/bash
yum -y install vsftpd &> /dev/null 不显示弹出的所有信息
systemctl start vsftpd
systemctl enable vsftpd
常量----固定的值
变量----使用固定的名称存放可能变化的值
变量的种类
自定义变量(不能数字开头,不能使用特殊符号)
变量名称=变量的值
$调用变量
unset 取消变量
a=100
[root@svr7 opt]# echo $a
100
[root@svr7 opt]# unset a
echo ${a}大括号可以避免混淆
环境变量 系统定义,直接调用
PWD
/opt
[root@svr7 opt]# echo $USER
root
[root@svr7 opt]# echo $SHELL
/bin/bash
[root@svr7 opt]# echo $HOSTNAME
svr7.tedu.cn
[root@svr7 opt]# echo $HOME
1,引号与反撇号
" " 双引号 界定范围
' ' 单引号 界定范围 屏蔽特殊符号功能
`` 反撇号 可以获取命令的执行结果,或者使用$( )可以实现
相同效果
位置变量与预定义变量
$1 执行脚本时后面跟的第1个位置参数
$2 执行脚本时后面跟的第2个位置参数
$3 执行脚本时后面跟的第3个位置参数
$* 执行脚本时后面跟的所有位置参数
$# 执行脚本时后面跟的所有位置参数的个数
$$ 随机的进程号
$? 判断上一条指令是否成功,0是成功,非0是失败
read指令交互式
#!/bin/bash
read -p "请输入用户名称:" n
useradd $n
read -p "请输入密码:" m
echo "$m" | passwd --stdin $n
stty -echo 屏蔽回显
stty echo 恢复回显
#!/bin/bash
read -p "请输入用户名称:" n
useradd $n
stty -echo
read -p "请输入密码:" m
stty echo
echo "$m" | passwd --stdin $n
3、export发布全局变量
export b=100 #创建变量 全局
[root@svr7 opt]# echo $b
100
[root@svr7 opt]# bash
[root@svr7 opt]# echo $b
100
exit 退出子进程
export -n b #全局变成局部
pstree | grep bash 重新打开一个窗口 查看当前开了几个子进程