第三阶段基础
时 间:2023年7月7日
参加人:全班人员
内 容:
shell实例
目录
shell脚本应用:
一、shell脚本
二、环境变量的基本使用
三、条件测试
shell脚本应用:
一、shell脚本
1、shell脚本的作用shell解释器的作用
1)shell脚本的作用
自动化运维使用
批量化重复操作使用脚本代替
2)shell解释器的作用
Linux系统默认使用的bash命令解释器
负责接收用户输入的命令提交CPU判断执行
2、脚本的基本结构和执行长见的方式
1)脚本的结构
vim test.sh | 脚本后缀文件*.sh |
#!/bin/bash | 声明 |
#E-mail:821409986@qq.com | 脚本的描述和写脚本的联系方式 |
脚本执行的命令 |
2)运行脚本的方式
sh test.sh | 使用sh命令运行 |
./test.sh | 在当前位置运行脚本 |
source ./test.sh | source命令运行脚本 |
3、管道符和重定型基本输入输出
1)基本的输入输出
标准的输入:接收或者读取用户输入的数据<
标准的输出:将数据显示在屏幕或者文件中>,追加>>
错误输出:错误输出可以显示在屏幕或者特定文件中,2>错误输出
混合输出:不管是正确或者错误都输出到文件中,&>
2)管道符|
把前一个命令执行的结果,变成后一个命令处理的对象
二、环境变量的基本使用
1、变量的类型
1)自定义变量
管理员手动创建,根据需要自己定义
2)环境变量
维护系统使用
不需要管理员创建系统自动创建
3)位置变量
命令行给脚本传递程序参数使用
4)预定义变量
bash预定义好的特殊变量
用户不能修改
2、配置自定义变量
1)创建变量,变量名字是a变量值为1000,b为2000
a=1000 b=2000
2)查看变量值两种方法
echo $a expr $a
3、变量常见赋值的符号
1)双引号,允许通过$符号引用其他变量值
test="$ab $bb"
echo $test
2)单引号,禁止引其他变量值
[root@huyang1 ~]# test='$ab $bb'
[root@huyang1 ~]# echo $test
$ab $bb
3)反撇,命令替换提取命令执行的结果
[root@huyang1 ~]# aa=`netstat -anptu | grep 22`
[root@huyang1 ~]# echo $aa
4)read将输入的内容赋值给特定的变量名
[root@huyang1 ~]# read -p "请输入特定的目录:" insert
请输入特定的目录:/adcefg
[root@huyang1 ~]# echo $insert
/adcefg
5)定义全局环境变量子shell可以应用
[root@huyang1 ~]# export a=100
[root@huyang1 ~]# echo $a
4、整数变量运算符
1)创建的运算符
+:加法 -:减法 \*:乘法
/:除法 %:求模(余)运算
2)运算基本的应用
[root@huyang1 ~]# a=100
[root@huyang1 ~]# b=200
[root@huyang1 ~]# expr $a + $b
300
[root@huyang1 ~]#expr 1 + 1
[root@huyang1 ~]#echo $[1+1]
[root@huyang1 ~]#echo “scale=2;1.25*1.25”|bc
free
vim mom.sh
#!/bin/bash
mt=$(free | awk ‘NR==2{print $2}’)
mu=$(free | awk ‘NR==2{print $3}’)
muu=$(expr $mu \* 100 / $mt)
echo $muu
或者
echo "scale=2; $mu/$mt*100" |bc
free | awk 'NR==2{print int($3/$2*100)"%"}'
3)花括号的用于区分符号
[root@huyang1 ~]# echo ${ab}0.10.1
benet0.10.1
5、特殊变量
1)环境变量
系统创建
2)位置变量
提供9个位置$n(n代表1--9) 九列
3)预定义变量
$#:命令行中位置参数
$*:所有位置参数
$?:记录的脚本执行状态0表示成功,非0表示错误
$0:执行脚本的进程程序名字
[root@huyang1 ~]# vim bak.sh
#!/bin/bash
mkdir /backup
tar zcf /backup/file_all-$(date +%F).tar.gz $* &>/dev/null
echo "共备份了$#个文件"
echo "成功执行了$0脚本"
echo "备份的文件为:$*"
以下是一个实例脚本:
挂载光盘
#!/bin/bash
#用户自动构建yum仓库脚本
#挂载光盘
mount /dev/sr0 /mnt
#创建仓库文件
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak
#创建yum文件
echo “[yum]
name=yum
baseurl=file:///mnt
enabled=1
gpgcheck=0” > local.repo
# 清除重建缓存
yum clean all && yum makecache fast
测 试:
挂载光盘提示信息重定向到黑洞
#!/bin/bash
#用户自动构建yum仓库脚本
echo “挂载光盘…..”
mount /dev/sr0 /mnt &> /dev/null
echo “创建仓库文件…..”
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak
#创建yun文件
echo “[yum]
name=yum
baseurl=file:///mnt
enabled=1
gpgcheck=0” > local.repo
echo “清除重建缓存…..”
yum clean all &> /dev/null && yum makecache fast &> /dev/null
echo “yum创建成功….”
测 试:
批量处理统一文件内容---非交互
vim pass.txt
123456
useradd user1
passwd --stdin user1 < pass.txt
或者
echo “123456” | passwd --stdin user1
cd /boot | ls –l
cd /boot ; ls –l
强制接收
cat first.sh
awk ‘{print $2}’first.sh
awk ‘ {print $2}’first.sh
awk ‘{print $2,$1,$3}’first.sh
df
df |grep “/$”| awk ‘{print $5}’
df |grep “/$”| awk ‘{print $5}’| awk –F ‘%’ ‘{print $1}’
#x=18
#expr 3 + $x
变量输出
name=zhangsan
echo $name
echo ${name}
echo $namenihao
echo ${name}nihao
read -p “请输入你的名字:” name
echo $name
变量,挂载光盘测试
#!/bin/bash
#用户自动构建yum仓库脚本
read -p “输入你的挂载点位置:” x
echo “挂载光盘…..”
mkdir $x
mount /dev/sr0 $x &> /dev/null
echo “创建仓库文件…..”
cd /etc/yum.repos.d/
mkdir bak
mv *.repo bak
#创建yun文件
echo “[yum]
name=yum
baseurl=file://$x
enabled=1
gpgcheck=0” > local.repo
echo “清除重建缓存…..”
yum clean all &> /dev/null && yum makecache fast &> /dev/null
echo “yum创建成功….”
测 试:
交互界面
#!/bin/bash
echo “huyang1….
kernel….”
read –p “localhost login:”user
if [ $user = “root”]
then
echo “欢迎登陆”
else
echo “拜拜”
fi
测 试:
三、条件测试
1、test判断
1)判断结果类型
真/假
2)判断语法
test -d /boot && echo "YES" | 测试boot是目录显示YES |
[ -d /boot ] && echo "yes" | 测试boot是目录显示YES |
3)常见的测试选项
-d测试目录
-f测试文件
-w测试写权限
-r测试读权限
-x测试执行权限
-e测试文件目录是否存在
[root@huyang1 ~]# vim cd.sh
#!/bin/bash
[ -d /cd ] || mkdir /cd
[ -d /cd/Packages ] || mount /dev/cdrom /cd &> /dev/null
2、比较运算符
1)常见的比较运算符
gt大于 lt小于
ge大于等于 le小于等于
eq等于 ne不等于
[root@huyang1 ~]# vim num.sh
#!/bin/bash
read -p "请输入一个数字:" num
[ $(expr $num % 2) -eq 0 ] && echo "$num 是偶数" || echo "$num 是基数"
测 试:
2)比较运算符的基本使用
[ 10 -gt 5 ] && echo "YES" | 10大于5显示为yes |
abc=`history | wc -l` [ $abc -gt 100 ] && echo "yes" | 提取history命令行数,和100比较大于100显示yes |
3、字符串比较
1)字符串比较运算符
=:字符串内容是否相同
!=:字符串内容是否不同
-z:检查字符串是否为空
2)字符串比较的应用,字符串需要使用双引号
[ "aaa" = "aaa" ] && echo "yes" | 判断aaa字符全是否等于aaa字符 |
[ $LANG != "en.US" ] && echo "不支持中文!!" | LANG变量不等于en.US显示不支持中文 |
4、逻辑测试
逻辑测试的常见运算符
&&:而且或者用-a表示,两个结果为真显示
||:或,或者使用-o表示,两个判断结果只需要满足一个条件显示为真
!:否,两个判断结果不成立为真
#!/bin/bash
read -p "输入考试成绩:" num
[ $num -ge 60 -a $num -le 100 ] && echo "考试及格"
或者
[ $num -ge 0 ] && [ $num -le 59 ] && echo "考试不及格"
测试: