shell脚本

2021-06-26  本文已影响0人  天生顽皮

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  第四个执行文件
image.png

3.特殊变量

image.png

4.变量引用

image.png
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
上一篇下一篇

猜你喜欢

热点阅读