[root@web1 ~]# cat /etc/shells 查看可用shell
[root@web1 ~]# sh 切换解释器
sh-4.2# exit 退出
[root@web1 ~]# yum -y install ksh 安装ksh解释器
[root@web1 ~]# cat /etc/shells 再次查看可用shell
bash优点,支持tab键,快捷键,别名,历史记录,管道,重定向
脚本中常用非交互式指令,比如ls cd pwd 等
而像vim之类的是交互式工具,在脚本中执行会影响后续指令执行
编写脚本的规范
1,声明解释器
#!/bin/bash
2,写注释
#此脚本的功能是。。。。
3,执行指令
[root@web1 opt]# vim test01.sh
脚本的执行方式
1,使用x权限[root@web1 opt]# chmod +x test01.sh
绝对路径[root@web1 opt]# /opt/test01.sh
相对路径[root@web1 opt]# ./test01.sh
2,使用解释器执行,无需x权限
[root@web1 opt]# bash test01.sh
使用另一个解释器,开启子进程
3,使用source命令执行,无需x权限
[root@web1 opt]# source test01.sh
使用当前解释器,不开启子进程
source可以使用 . (一个点) 替代
编写部署yum仓库的脚本
[root@web1 opt]# vim test02.sh
[root@web1 yum.repos.d]# yum repolist 检查
编写脚本安装ftp服务
[root@web1 opt]# vim test03.sh
systemctl status vsftpd 查结果
&> 正确的和错误的(所有的)信息重新放到(重定向)某个位置
/dev/null linux中的黑洞文件,扔进去的信息都会消失
有些程序在执行过程中会弹出过程信息,如果不想看到可以用 &> /dev/null 的组合消除这些信息
变量,使用固定名称存储可能会发生变化的量
1,提高脚本运行环境的适应力
2,提高脚本对任务的需求
3,便于在脚本中反复调用
变量类别
1,自定义变量
变量名称=变量的值
变量名称可以使用字母数字下划线,但不能使用特殊符号,不能以数字开头
[root@web1 opt]# a=10 定义变量
[root@web1 opt]# echo $a 调用变量
[root@web1 opt]# echo ${a}RMB 变量名容易与其他常量混淆的情况下,可以用大括号
2,环境变量,由系统提前定义好,使用时直接调用
USER(当前用户名)、SHELL(当前用户使用的解释器)、HOME(当前用户的家目录)、PWD(当前所在路径)、UID(当前用户的id号)、PS1(一级提示符)、PS2(二级提示符)、HOSTNAME(主机名)
3,位置变量与预定义变量
$1、$2、$3 …
0 、 0、 0、#、 ∗ 、 *、 ∗、 、 、 、?
[root@web1 opt]# vim test04.sh
#!/bin/bash
echo $1 执行脚本时第1个位置参数
echo $2 执行脚本时第2个位置参数
echo $3 执行脚本时第3个位置参数
echo $0 执行脚本的名称
echo $# 位置参数的总个数
echo $* 所有位置参数
echo $$ 随机的进程号
echo $? 判断上一个指令的执行结果,成功是0,非0是失败
[root@web1 opt]# set 查看所有变量
[root@web1 opt]# abc=8888
[root@web1 opt]# set | grep abc= 可以使用grep筛选
[root@web1 opt]# env 查大部分环境变量
[root@web1 opt]# env | grep HOSTNAME
HOSTNAME=web1
[root@web1 opt]# env | grep USER
USER=root
编写创业用户名并配置密码的脚本
#!/bin/bash
useradd xyz
echo 123 | passwd --stdin xyz
改良版
#!/bin/bash
useradd $1
echo $2 | passwd --stdin $1
测试
[root@web1 opt]# bash test05.sh xyz01 1234
[root@web1 opt]# bash test05.sh xyz02 1234
变量的扩展知识
1,引号
“” 双引号 界定范围
[root@web1 opt]# touch "a b" 创建a空格b的文件
[root@web1 opt]# echo "$a" 调用变量
‘’ 单引号 界定范围 屏蔽特殊符号
[root@web1 opt]# touch 'x y' 创建x空格y的文件
[root@web1 opt]# echo '$a' 屏蔽了特殊符号,不显示变量的内容,仅仅调用$a2个字符
$a
`` 反撇号 可以获取命令执行的结果,还可以使用$()替代
[root@web1 opt]# a=date
[root@web1 opt]# echo $a 测试效果,得到的值是四个字符
[root@web1 opt]# a=`date`
[root@web1 opt]# echo $a 测试效果,得到的值是date命令执行的结果
2,使用read指令将脚本改为交互式,-p代表可以加提示语句,最后定义变量名
#!/bin/bash
read -p "请输入用户名" n n是变量名,可以自定义
useradd $n
read -p "请输入密码" p p是变量名,可以自定义
echo $p | passwd --stdin $n
[root@web1 opt]# stty -echo 屏蔽回显
[root@web1 opt]# stty echo 恢复回显
再次改良创建用户的脚本,在输入密码的时候,可以隐藏
#!/bin/bash
read -p "请输入用户名" n
useradd $n
stty -echo
read -p "请输入密码" p
stty echo
echo $p | passwd --stdin $n
使用export发布全局变量,全局变量可以在子进程中使用
[root@web1 opt]# export a 将已有的变量发布为全局效果
[root@web1 opt]# export -n a 取消全局效果,恢复为局部效果
[root@web1 opt]# export b=2000 创建并将变量发布为全局效果
使用pstree可以查询目前使用的进程
运算 加 减 乘 除 取余数
1,使用expr工具
[root@web1 opt]# expr 1 + 1 加
[root@web1 opt]# expr 2 - 1 减
[root@web1 opt]# expr 2 \* 2 乘
[root@web1 opt]# expr 6 / 3 除
[root@web1 opt]# expr 10 % 3 取余数
[root@web1 opt]# a=10
[root@web1 opt]# b=20
[root@web1 opt]# expr $a + $b
[root@web1 opt]# expr $a + $a
[root@web1 opt]# expr $a + 10
2 使用 $[ ] 或者 $(( ))
[root@web1 opt]# echo $[1+1]
[root@web1 opt]# echo $[2-1]
[root@web1 opt]# echo $[2*2]
[root@web1 opt]# echo $[4/2]
[root@web1 opt]# echo $[5%2]
[root@web1 opt]# echo $[a+a]
[root@web1 opt]# echo $[a+b]
[root@web1 opt]# echo $((a+b))