1.执行脚本的方式
1.bash sh 执行 调用子shell
2.source . 执行 父shell运行
3.全路径 执行 执行权限 /etc/rc.local +x
2.环境变量
两类:
环境变量(全局变量)针对所有的shell生效
普通变量(局部变量)针对当前shell生效
unset 取消环境变量(当前)
1.环境变量 普通变量 全局局部 永久 临时
永久 /etc/profile
系统全局变量
shell中自定永久的局部变量
临时export定义 测试使用
名称定义
值的定义
命令定义
time=`date+%F`
time=$(date+%F)
2.1环境变量的定义
查看系统变量
env set
1.按照执行顺序
2.按照生效顺序
(1)/etc/profile 第一个执行 优先生效
(2).bash_profile 第二个执行 家目录相关的变量文件
(3).bashrc 第三个执行
(4)/etc/bashrc 第四个执行文件

3.特殊变量

4.变量引用

1.5.1 自定义变量与引用
# VAR=123
# echo $VAR
123
# VAR+=456
# echo $VAR
123456
5.脚本的传参
1.直接传参
[root@m01-shell ~]# cat test.sh
#!/bin/sh
pwd
echo $1 $2 $3
[root@m01-shell ~]# sh test.sh
/root
[root@m01-shell ~]# sh test.sh 10
/root
10
[root@m01-shell ~]# sh test.sh 10 20 30
/root
10 20 30
2.赋值传参
[root@m01-shell ~]# cat test.sh
#!/bin/sh
pwd
name=$1
age=$2
echo $name $age
[root@m01-shell ~]# sh test.sh oldboy 18
/root
oldboy 18
3.read读入
[root@m01-shell ~]# cat test.sh
#!/bin/sh
read -p "请输入你的姓名:" name # -p 提示符 双引号里面内容自定义 name 变量的名称 不要加双引号
echo $name
[root@m01-shell ~]# cat test.sh
#!/bin/sh
read -p "请输入你的姓名: " name # 在双引号加空格
echo $name
[root@m01-shell ~]# cat test.sh
#!/bin/sh
read -p "请输入你的姓名和年龄: " name age
echo $name
echo $age
[root@m01-shell ~]# sh test.sh
请输入你的姓名和年龄: oldboy 18
oldboy
18
[root@m01-shell ~]# cat test.sh
#!/bin/sh
read -p "请输入你的姓名: " name
read -p "请输入你的年龄: " age
echo $name
echo $age
[root@m01-shell ~]# sh test.sh
请输入你的姓名: oldboy
请输入你的年龄: 18
oldboy
18
[root@m01-shell ~]# cat test.sh
#!/bin/sh
read -p "请输入你的姓名: " name
read -p "请输入你的年龄: " age
echo name=$name
echo age=$age
[root@m01-shell ~]# sh test.sh
请输入你的姓名: oldboy
请输入你的年龄: 20
name=oldboy
age=20
5.变量子串
切割 ::
删除 # 从前往后 bb ##贪婪
% 从后往前删 %%贪婪
// 替换 /// 贪婪
统计字符串长度
${#name}
其他统计方式
expr wc -L awk
变量子串的删除和替换
[root@m01-shell ~]# url=www.oldboyedu.com
[root@m01-shell ~]# echo $url
www.oldboyedu.com
[root@m01-shell ~]#
[root@m01-shell ~]# echo $url|sed 's#www.##g'
oldboyedu.com
# 从前面往后删除 可以使用通配符匹配字符串
[root@m01-shell ~]# echo ${url#.}
www.oldboyedu.com
[root@m01-shell ~]#
[root@m01-shell ~]# echo ${url#*.}
oldboyedu.com
[root@m01-shell ~]# echo ${url#www.}
oldboyedu.com
## 贪婪匹配 删除到最后一个.
[root@m01-shell ~]# echo ${url#www.oldboyedu.}
com
[root@m01-shell ~]# echo ${url#*.*.}
com
[root@m01-shell ~]# echo ${url##*.}
com
从后往前删除
[root@m01-shell ~]# echo ${url}
www.oldboyedu.com
[root@m01-shell ~]#
[root@m01-shell ~]# echo ${url%*.}
www.oldboyedu.com
[root@m01-shell ~]# echo ${url%.*}
www.oldboyedu
[root@m01-shell ~]#
[root@m01-shell ~]# echo ${url%.*.*}
www
%% 贪婪匹配
[root@m01-shell ~]# echo ${url%%.*}
www
[root@m01-shell ~]# num=100%
[root@m01-shell ~]# echo $num
100%
[root@m01-shell ~]#
[root@m01-shell ~]# echo ${num%%}
100%
[root@m01-shell ~]# echo ${num%\%}
100
变量的替换
[root@m01-shell ~]# echo $url
www.oldboyedu.com
[root@m01-shell ~]# echo ${url/www/test}
test.oldboyedu.com
[root@m01-shell ~]# echo ${url/w/W}
Www.oldboyedu.com
[root@m01-shell ~]#
[root@m01-shell ~]# echo ${url//w/W}
WWW.oldboyedu.com
[root@m01-shell ~]# echo ${url/m/W}
www.oldboyedu.coW
贪婪替换//
[root@m01-shell ~]# echo ${url//w/W}
WWW.oldboyedu.com
5.1统计字符串长度小于3的
root@m01-shell ~]# echo $name
I am lizhenya teacher I am 18
第一种方式: 使用for循环方式输出
for i in I am lizhenya teacher I am 18
do
[ ${#i} -lt 3 ]
i=I
1 -lt 3 && echo $i
i=am
2 -lt 3 && echo $i
i=lizhenya
8 -lt 3 &&
i=techaer
done
第二种方式使用awk
[root@m01-shell ~]# echo $name|xargs -n1|awk '{if(length<3)print}'
I
am
I
am
18
第三种方式使用awk
[root@m01-shell ~]# echo $name|awk '{for(i=1;i<=NF;i++)if(length($i)<3)print $i}'
I
am
I
am
18
5.2统计变量子串的长度
第一种方法: wc -L
[root@m01-shell ~]# echo $name
I am oldboy
[root@m01-shell ~]# echo $name|wc -l # 获取文件中总共的行数
1
[root@m01-shell ~]# echo $name|wc -L # 获取文件中最长一行的长度
11
第二种方法: 使用子串的#
[root@m01-shell ~]# echo ${#name}
11
第三种方法: 使用expr
[root@m01-shell ~]# expr length "$name"
11
第四种方法: 使用awk
[root@m01-shell ~]# echo $name|awk '{print length}'
11
6.数值运算
6.1expr 只支持整数运算
[root@m01-shell ~]# expr 1 + 1
2
[root@m01-shell ~]#
[root@m01-shell ~]# expr 10 + 1
11
[root@m01-shell ~]# expr 10 - 1
9
[root@m01-shell ~]# expr 10 * 1
expr: syntax error
[root@m01-shell ~]# expr 10 \* 1
10
[root@m01-shell ~]# expr 10 - 1.5
案例: 判断我们输入的数字是否为整数
[root@m01-shell ~]# cat count.sh
#!/bin/sh
read -p "请输入一个整数: " num
expr 1 + $num &>/dev/null
[ $? -ne 0 ] && echo "你输入的不是整数" && exit
echo $num
[root@m01-shell ~]# sh count.sh
请输入一个整数: 1.5
你输入的不是整数
[root@m01-shell ~]# sh count.sh
请输入一个整数: 1q
你输入的不是整数
[root@m01-shell ~]# sh count.sh
请输入一个整数: 20
20
案例
3.1 输入两个整数计算这两个整数的相加,相减,相乘,相除,求余的结果
#!/bin/sh
while true
do
read -p "请输入2个整数: " num num1
expr $num + $num1
[ $? -ne 0 ] && echo "不是整数" && exit
expr $num - $num1
expr $num \* $num1
expr $num / $num1
done
6.2注意
$(()) PS: 注意两个小括号是做运算 一个小括号是执行命令 $() 运算效率最高
[root@m01-shell ~]# echo $((10+2-5))
7
[root@m01-shell ~]# echo $((10+2*5))
20
[root@m01-shell ~]# echo $(((10+2)*5))
60
[root@name ~]# nun=$(ls)
[root@name ~]# echo $nun
1.sh 2.sh 3.sh anaconda-ks.cfg diff.sh honglangman.sh jisuan.sh jiyuan.sh js.sh ss.sh test.sh
6.3let运算 需要使用变量 只支持整数运算
[root@name ~]# let sum=1+1
[root@name ~]# echo $sum
2
[root@name ~]# let i=$sum+1
[root@name ~]# echo $i
3
[root@m01-shell ~]# num=10
[root@m01-shell ~]# num1=20
[root@m01-shell ~]# let count=$num1+$num
[root@m01-shell ~]# echo $count
30
案例: 脚本中经常用到
for i in I am lizhenya
do
let a++
done
echo $a
[root@m01-shell /server/scripts/day2]# sh -x for.sh
+ for i in I am lizhenya
+ let a++
+ for i in I am lizhenya
+ let a++
+ for i in I am lizhenya
+ let a++
+ echo 3
3
6.4bc 支持小数和整数运算
[root@m01-shell ~]# echo 10+10|bc
20
[root@m01-shell ~]# echo 10*10|bc
100
[root@m01-shell ~]# echo 10-10|bc
0
[root@m01-shell ~]# echo 10-10.5|bc
-.5
6.5awk运算
[root@m01-shell ~]# awk 'BEGIN{print 10+10}'
20
[root@m01-shell ~]#
[root@m01-shell ~]# awk 'BEGIN{print 10-10}'
0
[root@m01-shell ~]# awk 'BEGIN{print 10+100}'
110
[root@m01-shell ~]# awk 'BEGIN{print 10+100/2}'
60
[root@m01-shell ~]# awk 'BEGIN{print 10+100/2*4}'
210
[root@m01-shell ~]# echo 10 20
10 20
[root@m01-shell ~]# echo 10 20|awk '{print $1+$2}'
30
6.6python 直接运算
expr $(()) $[] let bc awk python
expr 整数判断
$(()) $[] 在脚本中运算
let 在脚本中经常出现
bc 用的较少 测试使用
awk 在脚本中会出现
案例: 做一个计算器脚本 执行脚本输出结果
sh count.sh
输入第一个整数: num1
输入第二个整数: num2
要求1
输出到屏幕
10+10=20
10-10=0
要求2 判断传入的参数必须为整数 否则退出脚本
[root@m01-shell /server/scripts/day2]# cat count.sh
#!/bin/bash
echo $1+$2=$[$1+$2]
echo $1-$2=$[$1-$2]
echo $1/$2=$[$1/$2]
echo $1*$2=$[$1*$2]
echo "-------------------------------"
num1=$1
num2=$2
echo $num1+$num2=$[$num1+$num2]
echo $num1-$num2=$[$num1-$num2]
echo $num1*$num2=$[$num1*$num2]
echo $num1/$num2=$[$num1/$num2]
read -p "请输入两个整数: " num1 num2
expr $num1 + $num2 &>/dev/null
[ $? -ne 0 ] && echo "你输入的不是整数" && exit
echo $num1+$num2=$[$num1+$num2]
echo $num1-$num2=$[$num1-$num2]
echo $num1*$num2=$[$num1*$num2]
echo $num1/$num2=$[$num1/$num2]
死循环
while true
do
read -p "请输入两个整数: " num1 num2
expr $num1 + $num2 &>/dev/null
[ $? -ne 0 ] && echo "你输入的不是整数" && continue
echo $num1+$num2=$[$num1+$num2]
echo $num1-$num2=$[$num1-$num2]
echo $num1*$num2=$[$num1*$num2]
echo $num1/$num2=$[$num1/$num2]
done
7.数值比较
常用的比较整数的方式
[ 整数1 表示符 整数2 ]
表示符
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
-eq 等于
-ne 不等于
7.1
[root@m01-shell ~]# [ 10 -gt 5 ] && echo 成立 || echo 不成立
成立
[root@m01-shell ~]# [ 10 -ne 5 ] && echo 成立 || echo 不成立
成立
[root@m01-shell ~]# [ 10 -lt 5 ] && echo 成立 || echo 不成立
不成立
[root@m01-shell ~]# [ 10 -gt 10 ] && echo 成立 || echo 不成立
不成立
[root@m01-shell ~]# [ 10 -ge 10 ] && echo 成立 || echo 不成立
成立
案例1:
使用传参的方式判断两个数值的大小
[root@m01-shell ~]# cat diff.sh
#!/bin/sh
read -p "请输入两个整数: " num1 num2
[ $num1 -gt $num2 ] && echo "num1>num2"
[ $num1 -lt $num2 ] && echo "num1<num2"
[ $num1 -eq $num2 ] && echo "num1=num2"
案例2: 统计磁盘的使用率 如果磁盘使用率大于百分之2 则发送邮件到邮箱 (echo send mail......)
如果磁盘使用率小于百分之2 则提示 磁盘使用正常 输出当前的使用率
在命令行测试后写入脚本
1)取值
[root@m01-shell ~]# df -h|grep /$
/dev/mapper/centos_oldboy--muban-root 50G 2.0G 49G 4% /
[root@m01-shell ~]# df -h|sed -n '/\/$/p'
/dev/mapper/centos_oldboy--muban-root 50G 2.0G 49G 4% /
[root@m01-shell ~]# df -h|awk '/\/$/'
/dev/mapper/centos_oldboy--muban-root 50G 2.0G 49G 4% /
[root@m01-shell ~]# df -h|awk '/\/$/{print $(NF-1)}'
4%
2)做比较
use_disk=`df -h|awk '/\/$/{print $(NF-1)}'`
[ ${use_disk%\%} -gt 2 ] && echo sendmail...... || echo 磁盘使用正常 当前的使用率为 $use_disk
3)输出结果
4)执行 排错
[root@m01-shell /server/scripts/day2]# cat disk.sh
#!/bin/sh
use_disk=`df -h|awk '/\/$/{print $(NF-1)}'`
[ ${use_disk%\%} -gt 2 ] && echo sendmail...... || echo 磁盘使用正常 当前的使用率为 $use_disk
[root@m01-shell /server/scripts/day2]# sh -x disk.sh
++ df -h
++ awk '/\/$/{print $(NF-1)}'
+ use_disk=4%
+ '[' 4 -gt 2 ']'
+ echo sendmail......
sendmail......
判断里面支持命令
下面的案例 只要我们的命令执行后是整数 就可以正常运行
[root@m01-shell ~]# [ `df -h|awk '/\/$/{print $(NF-1)}'|awk -F% '{print $1}'` -gt 2 ]
[root@m01-shell ~]# echo $?
0
案例3: 统计内存使用率 使用率超过百分之二 则发送邮箱报警 否则输出提示使用正常 输出当前内存使用率
内存百分比计算方式: 已使用的除总的乘100
[root@m01-shell ~]# free|awk 'NR==2{print $3/$2*100}'
3.71132
[root@m01-shell /server/scripts/day2]# cat free.sh
#!/bin/sh
Mem_use=`free|awk 'NR==2{print $3/$2*100}'`
[ ${Mem_use%.*} -gt 20 ] && echo sendmail............ || echo ${Mem_use}%
案例4: 统计1分钟内系统的平均负载 超过1则发送邮件 否则提示正常
1.取值
[root@m01-shell /server/scripts/day2]# cat upload.sh
#!/bin/bash
use_load=`uptime|awk '{print $(NF-2)}'`
[ ${use_load%.*} -gt 1 ] && echo "sendmail......." || echo "${use_load%,}%"
ab -n200000 -c20000 http://127.0.0.1/index.html
多整数比较 偶尔会用
or 或者 -o
and 并且 -a
7.2
在正则中整数比较使用以下符号
[[ ]]
==
!=
>
<
>=
<=
在正则中多整数比较使用
|| 或者
&& 并且
[root@m01-shell ~]# [[ 10 == 10 ]]
[root@m01-shell ~]# echo $?
0
[root@m01-shell ~]# [[ 10 == 10 -o 50 > 10 ]]
-bash: syntax error in conditional expression
-bash: syntax error near `-o'
[root@m01-shell ~]# [[ 10 == 10 || 50 > 10 ]]
[root@m01-shell ~]#
[root@m01-shell ~]# echo $?
0
[root@m01-shell ~]# [[ 10 == 10 && 50 > 10 ]]
[root@m01-shell ~]# echo $?
0
8.文件判断
[ -e file ] 表示文件存在则为真
[ -f file ] 表示普通文件存在则为真
[ -d file ] 表示目录文件存在则为真
[ -r file ] 表示文件可读则为真
[ -w file ] 表示文件可写真为真
[ -x file ] 表示文件可执行则为真
[root@m01-shell ~]# [ -f /etc/ ] && echo 成立 || echo 不成立
不成立
[root@m01-shell ~]# [ -d /etc/ ] && echo 成立 || echo 不成立
成立
[root@m01-shell ~]# [ -d /etc/hehe ] && echo 成立 || echo 不成立
不成立
[root@m01-shell ~]# [ -e /etc/ ] && echo 成立 || echo 不成立
成立
[root@m01-shell ~]# [ -x /etc/rc.local ] && echo 成立 || echo 不成立
不成立
[root@m01-shell ~]# [ -x /etc/rc.local ] && echo 成立 || echo 不成立
成立
案例:
-f 判断文件是否存在
[root@m01-shell ~]# [ -f /etc/init.d/functions ] && . /etc/init.d/functions
functions 函数库 函数可以直接调用
函数调用
[root@m01-shell ~]# cat 2.sh
fun(){
echo hehe
}
[root@m01-shell ~]# sh 2.sh
[root@m01-shell ~]# [ -f 2.sh ] && . 2.sh
[root@m01-shell ~]# fun
hehe
d 判断目录是否存在
[root@m01-shell ~]# [ -d 10.0.0.61 ] || mkdir `hostname -I|awk '{print $1}' `
[root@m01-shell ~]# ll
drwxr-xr-x 2 root root 6 Jun 25 17:10 10.0.0.61
[root@m01-shell ~]# [ -d /etc ] && tar zcf etc.tar.gz /etc || echo 目录不存在
tar: Removing leading `/' from member names
[root@m01-shell ~]# ll
-rw-r--r-- 1 root root 10446728 Jun 25 17:11 etc.tar.gz
[root@m01-shell ~]# [ -d /etcccc ] && tar zcf etc.tar.gz /etc || echo 目录不存在
目录不存在
8.1使用正则可以做整数的判断
[root@shell ~]# num=10
[root@shell ~]# [[ $num =~ ^[0-9]+$ ]] && echo "成立" || echo 不成立
成立
[root@shell ~]# num=10q
[root@shell ~]# [[ $num =~ ^[0-9]+$ ]] && echo "成立" || echo 不成立
不成立
[root@shell ~]# num=1t0
[root@shell ~]# [[ $num =~ ^[0-9]+$ ]] && echo "成立" || echo 不成立
不成立
[root@shell ~]# num=a10
[root@shell ~]# [[ $num =~ ^[0-9]+$ ]] && echo "成立" || echo 不成立
不成立
[root@shell ~]# num=34252345
[root@shell ~]# [[ $num =~ ^[0-9]+$ ]] && echo "成立" || echo 不成立
成立
9.if判断
语法结构: 单分支 一个条件 一个结果
第一种写法
if [ -f /etc/profile ];then [ -f /etc/profile ] && echo 成立 单分支 一个条件 对应一个结果
echo hehe 执行的命令
fi
第二种写法
if [ -f /etc/profile ]
then
执行的命令
fi
[ $? -ne 0 ] && echo 请输入正确的
举例: 单分支
if [ 你有钱 ];then
我就嫁给你
fi
举例: 双分支 [ -f /etc/profile ] && echo 成立 || echo 不成立
if [ 你有钱 ];then
我就嫁给你
else
拜拜
fi
9.1案例:
[root@shell /server/scripts/day3]# cat if.sh
#!/bin/sh
if [ 10 -ne 10 ]
then
echo 成立
else
echo 不成立
fi
[root@shell /server/scripts/day3]# cat if.sh
#!/bin/sh
if [ -f $1 ]
then
echo $1 存在
else
echo $1 不存在
案例: 输入两个整数 使用if判断两个整数谁大谁小或等于
sh count.sh
30>20
10=10
10<20
[root@shell /server/scripts/day3]# cat count.sh
#!/bin/sh
read -p "请输入两个整数: " num1 num2
expr $num1 + $num2 &>/dev/null
if [ $? -ne 0 ];then
echo 请输入正确的数字
exit
fi
if [ $num1 -gt $num2 ]
then
echo "$num1>$num2"
elif [ $num1 -lt $num2 ]
then
echo "$num1<$num2"
else
echo "$num1=$num2"
fi
9.2实际应用
菜单:
安装不同的PHP版本 PHP5.4 PHP5.5 PHP7.1
第一种方式使用echo
[root@shell /server/scripts/day3]# cat install_php.sh
#!/bin/sh
echo "------------------------------PHP安装列表-----------------------------"
echo "| 1.INSTALL PHP5.4 |"
echo "| 2.INSTALL PHP5.5 |"
echo "| 3.INSTALL PHP7.1 |"
echo "------------------------------PHP安装列表-----------------------------"
第二种方式使用cat
echo "第二种菜单使用cat"
cat<<EOF
1.INSTALL PHP5.4
2.INSTALL PHP5.5
3.INSTALL PHP7.1
EOF
脚本的日志 需要把正确的结果和错误的都追加到日志文件中
[root@shell /server/scripts/day3]# cat install_php.sh
#!/bin/sh
echo "------------------------------PHP安装列表-----------------------------"
echo "| 1.INSTALL PHP5.4 |"
echo "| 2.INSTALL PHP5.5 |"
echo "| 3.INSTALL PHP7.1 |"
echo "------------------------------PHP安装列表-----------------------------"
read -p "请输入你要安装的版本号的编号或者是版本: " num
if [ $num -eq 1 ];then
echo "源正在安装请稍等" &>>/php_install.log
echo "安装PHP5.4源.................." &>>/php_install.log
sleep 2 &>>/php_install.log
echo "源安装成功" &>>/php_install.log
echo "开始安装PHP..........." &>>/php_install.log
sleep 2
echo "恭喜您PHP5.4安装成功" &>>/php_install.log
判断是否安装文件成功
[root@shell ~]# cat wget.sh
#!/bin/sh
if [ `rpm -qa wget|wc -l` -eq 0 ];then
yum -y install wget &>>gwet.log
if [ $? -eq 0 ];then
echo "wget安装成功"
else
echo "wget安装失败 请检查网络....."
fi
else
echo "wget已经安装不需要重复安装"
fi
[root@shell /server/scripts/day3]# cat install_php.sh
#!/bin/sh
echo "------------------------------PHP安装列表-----------------------------"
echo "| 1.INSTALL PHP5.4 |"
echo "| 2.INSTALL PHP5.5 |"
echo "| 3.INSTALL PHP7.1 |"
echo "------------------------------PHP安装列表-----------------------------"
read -p "请输入你要安装的版本号的编号或者是版本: " num
if [ $num -eq 1 ];then
echo "源正在安装请稍等" &>>/php_install.log
echo "安装PHP5.4源.................." &>>/php_install.log
sleep 2 &>>/php_install.log
echo "源安装成功" &>>/php_install.log
echo "开始安装PHP..........." &>>/php_install.log
sleep 2
echo "恭喜您PHP5.4安装成功" &>>/php_install.log
elif [ $num -eq 2 ];then
echo "源正在安装请稍等"
echo "安装PHP5.5源.................."
sleep 2
echo "源安装成功"
echo "开始安装PHP..........."
sleep 2
echo "恭喜您PHP5.5安装成功"
elif [ $num -eq 3 ];then
echo "源正在安装请稍等"
echo "安装PHP7.1源.................."
sleep 2
echo "源安装成功"
echo "开始安装PHP..........."
sleep 2
echo "恭喜您PHP7.1安装成功"
fi
------------------多整数比较
[root@shell /server/scripts/day3]# cat install_php.sh
#!/bin/sh
echo "------------------------------PHP安装列表-----------------------------"
echo "| 1.INSTALL PHP5.4 |"
echo "| 2.INSTALL PHP5.5 |"
echo "| 3.INSTALL PHP7.1 |"
echo "------------------------------PHP安装列表-----------------------------"
read -p "请输入你要安装的版本号的编号或者是版本: " num
if [ $num = "1" -o "$num" = "PHP5.4" ];then
echo "源正在安装请稍等"
echo "安装PHP5.4源.................."
sleep 2
echo "源安装成功"
echo "开始安装PHP..........."
sleep 2
echo "恭喜您PHP5.4安装成功"
elif [ $num = 2 -o $num = "PHP5.5" ];then
echo "源正在安装请稍等"
echo "安装PHP5.5源.................."
sleep 2
echo "源安装成功"
echo "开始安装PHP..........."
sleep 2
echo "恭喜您PHP5.5安装成功"
elif [ $num = 3 -o $num = "PHP7.1" ];then
echo "源正在安装请稍等"
echo "安装PHP7.1源.................."
sleep 2
echo "源安装成功"
echo "开始安装PHP..........."
sleep 2
echo "恭喜您PHP7.1安装成功"
fi
案例2:
通过不同的系统版本号 安装不同的YUM源
centos7 和 centos6 yum源不同
判断网络是否通 如果不通使用systemctl restart network
1.获取版本号
[root@shell ~]# cat /etc/redhat-release |awk '{print $(NF-1)}'
7.8.2003
2.通过if判断 6 7
3.6执行安装6的YUM源
curl
wget 使用wget
判断wget是否存在 不存在则安装
7.7执行安装7的YUM源
先写框架
[root@shell /server/scripts/day3]# cat yum.sh
#!/bin/bash
#centos6和centos7获取当前文件中的列不同
os_ver=`cat /etc/redhat-release |awk '{print $(NF-1)}'`
if [ ${os_ver%%.*} -eq 7 ]
then
wget -O /etc/yum.repos.d/shell-epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
elif [ ${os_ver%%.*} -eq 6 ]
then
wget -O /etc/yum.repos.d/shell-epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
else
echo "请检查您的系统版本"
fi
---------------------------------完善后
[root@shell /server/scripts/day3]# cat yum.sh
#!/bin/bash
#centos6和centos7获取当前文件中的列不同
os_ver=`cat /etc/redhat-release |awk '{print $(NF-1)}'`
if [ ${os_ver%%.*} -eq 7 ]
then
ping -c2 -W1 114.114.114.114 &>/dev/null
if [ $? -ne 0 ];then
echo "网络不通正在重启网络请稍后......"
systemctl restart network
ping -c2 -W1 114.114.114.114 &>/dev/null
[ $? -ne 0 ] && echo "sendmail......管理员请尽快检查服务器的网络"
fi
if [ `rpm -qa wget|wc -l` -eq 0 ];then
yum -y install wget &>/dev/null
if [ $? -eq 0 ];then
echo "wget 安装成功......."
else
echo "安装失败 检查网络或YUM源....."
fi
fi
wget -O /etc/yum.repos.d/shell-epel.repo http://mirrors.aliyun.com/repo/epel-7.repo &>/dev/null
if [ $? -eq 0 ];then
echo "YUM源更新成功"
else
echo "YUM源更新不成功 可能是由于网络引起"
fi
elif [ ${os_ver%%.*} -eq 6 ]
then
wget -O /etc/yum.repos.d/shell-epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
else
echo "请检查您的系统版本"
if [ $? -eq 0 ];then
echo "YUM源更新成功"
else
echo "YUM源更新不成功 可能是由于网络引起"
fi
fi
---------------------------------------------------------------------------------------------
二级菜单
PHP MySQL Redis Nginx 每个服务有不同的版本
[root@shell /server/scripts/day3]# cat menu.sh
#!/bin/sh
while true
do
echo "------------------------------SERVER安装列表-----------------------------"
echo "| 1.INSTALL PHP |"
echo "| 2.INSTALL MySQL |"
echo "| 3.INSTALL Redis |"
echo "| 4.INSTALL Nginx |"
echo "| 5.退出当前脚本 |"
echo "------------------------------SERVER安装列表-----------------------------"
read -p "请输入你要安装服务的编号或者服务名称:[1|PHP|2|MySQL] " num
if [ "$num" = "1" -o $num = "PHP" ];then
echo "------------------------------PHP安装列表-----------------------------"
echo "| 1.INSTALL PHP5.1 |"
echo "| 2.INSTALL PHP5.2 |"
echo "| 3.INSTALL PHP5.3 |"
echo "| 4.INSTALL PHP5.4 |"
echo "------------------------------PHP安装列表-----------------------------"
read -p "请输入你要安装服务的编号或者版本号:[1|PHP|2|MySQL] " num1
if [ "$num1" = "1" -o "$num1" = "PHP5.1" ];then
echo "安装YUM源......."
sleep 2
echo "PHP5.1安装成功"
elif [ "$num1" = "2" -o "$num1" = "PHP5.2" ];then
echo "安装YUM源......."
sleep 2
echo "PHP5.2安装成功"
fi
elif [ "$num" = "2" -o $num = "MySQL" ];then
echo "------------------------------MySQL安装列表-----------------------------"
echo "| 1.INSTALL MySQL5.4 |"
echo "| 2.INSTALL MySQL8.0 |"
echo "| 3.INSTALL MySQL8.1 |"
echo "| 4.INSTALL MySQL8.2 |"
echo "------------------------------MySQL安装列表-----------------------------"
read -p "请输入你要安装服务的编号或者版本号:[1|PHP|2|MySQL] " num2
if [ "$num2" = "1" -o "$num2" = "MySQL5.4" ];then
echo "安装YUM源......."
sleep 2
echo "MySQL5.4安装成功"
elif [ "$num2" = "2" -o "$num2" = "MySQL5.5" ];then
echo "安装YUM源......."
sleep 2
echo "MySQL5.5安装成功"
fi
elif [ "$num" = "5" ];then
echo "欢迎下次再来再见!!!"
exit
fi
done
-----------------------------------------------------
9.3猜数字脚本,当用户输入的数字和预设数字(随机生成一个0-100的数字)一样时,直接退出,否则让用户一直输入,并且提示用户的数字比语塞数字大或者小
1.知道让命令随机生成一个数字
echo $RANDOM(0-32767)
echo $((RANDOM%100+1)) 取余 1-100
2.read读入让用户输入一个数字
3.让用户输入的和生成的做比较 输出结果
[root@shell /server/scripts/day3]# cat ran.sh
#!/bin/sh
ran=`echo $((RANDOM%100+1))`
read -p "请输入要猜的数字1-100: " num
if [ $num -gt $ran ];then
echo "你输入的数字大了"
elif [ $num -lt $ran ];then
echo "你输入的数字小了"
else
echo "恭喜你猜对了!!"
fi
猜的次数---------------------------------------
[root@shell /server/scripts/day3]# cat ran.sh
#!/bin/sh
ran=`echo $((RANDOM%100+1))`
while true
do
let i++
read -p "请输入要猜的数字1-100: " num
if [ $num -gt $ran ];then
echo "你输入的数字大了"
elif [ $num -lt $ran ];then
echo "你输入的数字小了"
else
echo "恭喜你猜对了!! 源数字为$ran"
echo "总共猜了$i 次"
exit
fi
done
网友评论