shell脚本
cat /etc/shells 查看本机所有解释器
yum -y install ksh 安装新解释器
bash的优点
tab键,快捷键, 别名,历史命令,管道,重定向
-----------------------------------------------------
编写shell脚本规范
1,声明解释器
#!/bin/bash
2,注释,可以说明脚本功能, 变量的作用等
3,执行代码
#!/bin/bash
#这是一个测试脚本
echo abc
chmod +x test01.sh
使用绝对路径或者相对路径
脚本的执行方式:
1, +x权限
/opt/test01.sh
2, 直接使用解释器执行, 使用新解释器(开启子进程)执行脚本命令
bash test01.sh
3,使用source(或者.)命令执行,使用当前解释器(不开启子进程)执行脚本命令
source test01.sh
pstree 查看程序的进程树
--------------------------------------------------------------------------------
编写部署yum仓库的脚本:
#!/bin/bash
#部署yum
url=http://content.example.com/rhel7.0/x86_64/dvd
rm -rf /etc/yum.repos.d/*.repo
echo "[abc]
name=abc
baseurl=$url
enabled=1
gpgcheck=0" > /etc/yum.repos.d/abc.repo
bash test02.sh 编写完后执行脚本
yum repolist 检查结果
---------------------------------------------------------------------------
编写部署ftp服务脚本:
#!/bin/bash
yum -y install vsftpd &> /dev/null
systemctl restart vsftpd
systemctl enable vsftpd
bash test03.sh 执行
systemctl status vsftpd 检查服务状态
--------------------------------------------------------------------------
常量 固定不变
变量 灵活多变,脚本多使用变量可以增加性能
变量的种类:
1,自定义变量
变量名称=变量的值 定义变量值的过程叫赋值,名称的定义可以用大小写字母,数字,下划线,不能以数字开头,不能使用特殊符号
a=20 定义变量
echo $a 调用变量
a1=20
1a=20 定义失败
a_1=20
a$=20 定义失败
a=40
echo $a
echo $aRMB 容易混淆
echo ${a}RMB 加大括号间隔
2,环境变量
UID当前用户的ID号 USER当前用户名 SHELL当前用户的解释器 HOSTNAME主机名 HOME当前用户的家目录 PWD所在目录位置 PATH存放命令的路径 PS1一级提示符 PS2二级提示符
3,位置变量与预定义变量
$1 $2 $3 ......
$0 $# $* $$ $?
#!/bin/bash
echo $1 显示脚本后的第1个参数
echo $2 显示脚本后的第2个参数
echo $3 显示脚本后的第3个参数
echo $0 显示脚本执行名称
echo $# 显示参数的个数
echo $* 显示所有参数
echo $$ 显示进程号
echo $? 判断上一条指令是否执行成功,0是成功,非0是失败
------------------------------------------------------------
编写创建用户并配置密码的脚本:
创建用户xyz 配置密码123
#!/bin/bash
useradd xyz
echo 123 |passwd --stdin xyz
改良版
#!/bin/bash
useradd $1
echo $2 |passwd --stdin $1
bash test05.sh xyz1 321 测试效果,创建xyz1,密码321
------------------------------------------------------------
变量的扩展应用
一:
1, "" 界定范围
2, '' 界定范围,屏蔽特殊符号
3, `` 反撇号,可以获取命令执行结果
$( ) 可以实现相同效果
touch a b 创建2个文件
touch "a b" 创建1个文件
touch 'x y' 创建1个文件
a=10
echo "$a" 看变量的值
echo '$a' 输出字符$a
a=date 把4个字母赋值给a
a=`date` 将date执行结果赋值给a
echo $a 查看
二:
将脚本设置为交互式, 可以从用户获取变量的值
read -p "提示信息" 变量名
再次改良
#!/bin/bash
read -p "请输入一个用户名" u
useradd $u
stty -echo
read -p "请输入一个密码" p
stty echo
echo $p |passwd --stdin $u
stty -echo 屏蔽回显
stty echo 恢复回显
三:
a=10 局部变量
HOSTNAME 全局变量
export a 将a发布为全局
bash 开启新解释器
echo $a 依然可以使用该变量
exit
export b=20 创建+发布b为全局变量
bash
echo $b
exit
export -n b 取消变量b的全局状态,恢复为局部变量
env 查看所有常用环境变量
set 查看所有变量
-----------------------------------------------------------------------------------------
shell中的运算
方法一:
expr 1 + 1 加
expr 2 - 1 减
expr 2 \* 2 乘 \转义符号 屏蔽之后一个字符的特殊含义
expr 2 / 2 除
expr 5 % 2 求模(取余数)
a=10
b=20
expr $a + $b 支持变量的运算
expr $a + $a
expr $a + 100
方法二:
echo $[1+1]
echo $[1-1]
echo $[2*2]
echo $[2/2]
echo $[10%2]
echo $[a+a]
echo $[a-a]
echo $[b-a]
echo $[b%a]
方法三:
let 运算结果不显示, 通常用于使用运算结果定义变量的值,或者对变量进行自增减
定义变量:
let a=1+1
对变量进行自增减:
常规写法 主流写法
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计算器,可以计算小数
echo 1.1+1 |bc 非交互式使用
echo 10/3 |bc
echo "scale=3;10/3" |bc 定义小数点后长度并运算