什么是Shell?
-
在Linux内核与用户之间的解释器程序
-通常指/bin/bash
-负责向内核翻译及传达用户/程序指令
-相当于操作系统的"外壳"如何切换Shell环境
Shell的使用方式
交互式--命令行
-人工干预,智能化程度高
-逐条解释执行,效率低
非交互式--脚本
-需要提前设计,智能化难度大
-批量执行,效率高
-方便在后台静悄悄地运行
常见的Shell程序种类
-
如何切换Shell环境
-通过usermod、chsh更改登录Shell
-手动执行目标Shell程序
Bash基本特性
-
命令行环境回顾
-快捷键,TAB键补齐
-命令历史
-命令别名
-标准输入输出
-重定向
-管道操作
编写Shell脚本规范
1.声明解释器
#!/bin/bash
2.注释,可以说明脚本功能,变量的作用等
3.执行代码
脚本的执行方式:
1.+x权限 (不开启子进程)
2.直接使用解释器执行,使用新解释器(开启子进程)执行脚本命令
3.使用source命令执行,source使用当前解释器(不开启子进程)执行脚本命令
编写部署YUM仓库的脚本
#!/bing
vim test03.sh
[haha] #仓库名
name haxi
baseurl ftp://192.168.4.254/centos-1804
编写部署ftp服务脚本
#!/bin/bash
vim test03.sh
yum -y install vsftpt &>/dev/null #下载ftp服务
systemctl restart vsftpd #重启服务
systemctl enable vsftpd #设置开机自启
bash test03.sh #执行
systemctl status vsftpd #检查服务状态
————————————————
常见 固定变
变量 灵活多变,脚本可使用可以增加性能
变量的种类
1.自定义变量
变量名称=变量的值 定义变量值的过程叫赋值,名称的定义可以用大小写字母,数字,下划线,不能以数字开头,不能用特殊符号
变量名:abc _Abc
定义变量:
a=20 #定义变量
echo $20 #调用变量
a1=20
1a=20 #定义失败
a_1=20
a$=20 #定义失败
a=40
echo $a
echo $aRMB #容易混淆
echo ${a}RMB #加大括号间隔
取消定义:
a=10 #定义变量
a= #定义变量为空(取消定义)
unset a #取消定义
环境变量:
$UID(用户ID号) $USER(用户名) $SHELL(当前用户的解释器) $HOSTNAME(主机名) $HOME(当前用户的家目录) $PWD(所在目录位置) $PATH(存放命令的路径) $PS1(一级提示符) $PS2(二级提示符)
位置变量与预定义变量
$0 $1 $2 $3 #位置参数的数值
$# #位置参数的个数
$? #上一条命令是否成功 0是成功 其他则是失败
$* #显示所有参数
$$ #显示进程号
变量的扩展
1."" 界定范围
2.'' 界定范围,屏蔽特殊符号
3.`` 反撇号,可以获取命令执行的结果
$()可以实现相同效果
touch a b #创建两个文件
touch "a b" #创建一个文件
a=10
echo "$a" #输出变量的值
echo '$a' #输出字符$a
a=date #把4个字母赋值给a
a=`date` #把date的执行结果赋值给a
脚本常用的命令
讲脚本设置为交互式,可以从用户获取变量的值
read -p "提示信息" 变量名
stty -echo 屏蔽显示
stty echo 取消屏蔽显示
a=10 #局部变量
#全局变量
export a #把变量a变成全局变量
export b=20 #创建+发布b为全局变量
export -n a #取消全局变量
env #查看所有常用环境变量
set #查看所有变量
————————————————
shell中的运算
方法一:
expr 1 + 1
expr 2 - 1
expr 2 \* 2 # \转义符号 屏蔽之后一个字符的特殊含义
expr 9 / 3
expr 5 % 2 #求模 取余数
方法二:
echo $[ ]
echo $[1+1]
echo $[8-5]
echo $[8*6]
echo $[8/2]
echo $[8%3]
方法三:
let 运算结果不显示,通常用于使用运算结果定义变量的值,或者对变量进行自增减
常规写法 主流写法
let a=a+1 let a++
let a=a-1 let a--
let a=a+2 let a+=2
let a=a+b let a+=b
let a=a*b let a*=b
方法四:bc计算器,可以计算小数
bc #常规使用
1+1
2-1
echo 1.1+2 | bc #非交互式使用
scale3 #定义小数点后长度
echo "scale=3;10/3" |bc #定义小数点后并运算