shell腳本

1.執(zhí)行腳本的方式

1.bash  sh  執(zhí)行  調(diào)用子shell
2.source  .  執(zhí)行  父shell運行
3.全路徑   執(zhí)行  執(zhí)行權(quán)限  /etc/rc.local +x

2.環(huán)境變量

兩類:
環(huán)境變量(全局變量)針對所有的shell生效
普通變量(局部變量)針對當前shell生效
unset   取消環(huán)境變量(當前)
1.環(huán)境變量  普通變量  全局局部  永久   臨時
永久  /etc/profile
系統(tǒng)全局變量
shell中自定永久的局部變量
臨時export定義    測試使用

名稱定義
值的定義
命令定義
time=`date+%F`
time=$(date+%F)
2.1環(huán)境變量的定義
查看系統(tǒng)變量
env   set
1.按照執(zhí)行順序
2.按照生效順序
(1)/etc/profile  第一個執(zhí)行  優(yōu)先生效
(2).bash_profile 第二個執(zhí)行 家目錄相關(guān)的變量文件
(3).bashrc  第三個執(zhí)行
(4)/etc/bashrc  第四個執(zhí)行文件
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 提示符 雙引號里面內(nèi)容自定義 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    ##貪婪
         % 從后往前刪      %%貪婪
          //   替換                ///  貪婪
統(tǒng)計字符串長度
     ${#name}
其他統(tǒng)計方式
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統(tǒng)計字符串長度小于3的
root@m01-shell ~]# echo $name
I am lizhenya teacher I am 18

第一種方式: 使用for循環(huán)方式輸出
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統(tǒng)計變量子串的長度
第一種方法: wc -L
[root@m01-shell ~]# echo $name
I am oldboy
[root@m01-shell ~]# echo $name|wc -l            # 獲取文件中總共的行數(shù)
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.數(shù)值運算

6.1expr 只支持整數(shù)運算
[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

    案例: 判斷我們輸入的數(shù)字是否為整數(shù)
    [root@m01-shell ~]# cat count.sh
    #!/bin/sh
    read -p "請輸入一個整數(shù): " num
    expr 1 + $num &>/dev/null
    [ $? -ne 0 ] && echo "你輸入的不是整數(shù)" && exit 

    echo $num
    [root@m01-shell ~]# sh count.sh 
    請輸入一個整數(shù): 1.5
    你輸入的不是整數(shù)
    [root@m01-shell ~]# sh count.sh 
    請輸入一個整數(shù): 1q
    你輸入的不是整數(shù)
    [root@m01-shell ~]# sh count.sh 
    請輸入一個整數(shù): 20
    20
案例
3.1 輸入兩個整數(shù)計算這兩個整數(shù)的相加吟宦,相減溯街,相乘,相除除嘹,求余的結(jié)果
#!/bin/sh
while  true
do
read  -p  "請輸入2個整數(shù): " num num1
expr  $num + $num1
 [ $? -ne 0  ] &&   echo  "不是整數(shù)" && exit
expr  $num - $num1
expr  $num \* $num1
expr  $num / $num1
done
6.2注意
$(()) PS: 注意兩個小括號是做運算 一個小括號是執(zhí)行命令 $()  運算效率最高
[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運算 需要使用變量 只支持整數(shù)運算
[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

案例: 腳本中經(jīng)常用到
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 支持小數(shù)和整數(shù)運算
[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 整數(shù)判斷
$(()) $[] 在腳本中運算
let  在腳本中經(jīng)常出現(xiàn)
bc  用的較少 測試使用 
awk 在腳本中會出現(xiàn)


案例: 做一個計算器腳本 執(zhí)行腳本輸出結(jié)果
sh count.sh
輸入第一個整數(shù): num1
輸入第二個整數(shù): num2
要求1
輸出到屏幕
10+10=20
10-10=0
要求2 判斷傳入的參數(shù)必須為整數(shù) 否則退出腳本
[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 "請輸入兩個整數(shù): " num1 num2
expr $num1 + $num2 &>/dev/null
[ $? -ne 0 ] && echo "你輸入的不是整數(shù)" && exit
echo $num1+$num2=$[$num1+$num2]
echo $num1-$num2=$[$num1-$num2]
echo $num1*$num2=$[$num1*$num2]
echo $num1/$num2=$[$num1/$num2]



死循環(huán)
while true
do
read -p "請輸入兩個整數(shù): " num1 num2
expr $num1 + $num2 &>/dev/null
[ $? -ne 0 ] && echo "你輸入的不是整數(shù)" && continue
echo $num1+$num2=$[$num1+$num2]
echo $num1-$num2=$[$num1-$num2]
echo $num1*$num2=$[$num1*$num2]
echo $num1/$num2=$[$num1/$num2]

done

7.數(shù)值比較

常用的比較整數(shù)的方式
[ 整數(shù)1 表示符 整數(shù)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: 
使用傳參的方式判斷兩個數(shù)值的大小
[root@m01-shell ~]# cat diff.sh 
#!/bin/sh
read -p "請輸入兩個整數(shù): " num1 num2
[ $num1 -gt $num2 ] && echo "num1>num2"
[ $num1 -lt $num2 ] && echo "num1<num2"
[ $num1 -eq $num2 ] && echo "num1=num2"

案例2: 統(tǒng)計磁盤的使用率 如果磁盤使用率大于百分之2 則發(fā)送郵件到郵箱 (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)輸出結(jié)果
 4)執(zhí)行 排錯 
    [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......

判斷里面支持命令
下面的案例 只要我們的命令執(zhí)行后是整數(shù) 就可以正常運行
[root@m01-shell ~]# [ `df -h|awk '/\/$/{print $(NF-1)}'|awk -F% '{print $1}'` -gt 2 ]
[root@m01-shell ~]# echo $?
0



案例3: 統(tǒng)計內(nèi)存使用率 使用率超過百分之二 則發(fā)送郵箱報警 否則輸出提示使用正常 輸出當前內(nèi)存使用率
       內(nèi)存百分比計算方式: 已使用的除總的乘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: 統(tǒng)計1分鐘內(nèi)系統(tǒng)的平均負載 超過1則發(fā)送郵件 否則提示正常
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

多整數(shù)比較 偶爾會用
or  或者  -o 
and 并且  -a
7.2
在正則中整數(shù)比較使用以下符號
[[  ]]
==
!=
>
<
>=
<=
在正則中多整數(shù)比較使用 
|| 或者  
&& 并且
[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 ]  表示文件可執(zhí)行則為真

[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 函數(shù)庫 函數(shù)可以直接調(diào)用
函數(shù)調(diào)用
[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使用正則可以做整數(shù)的判斷
[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判斷

語法結(jié)構(gòu): 單分支   一個條件  一個結(jié)果 
第一種寫法                                   
if [ -f /etc/profile ];then                 [  -f /etc/profile ] && echo 成立   單分支 一個條件 對應(yīng)一個結(jié)果
echo hehe  執(zhí)行的命令
fi
第二種寫法 
if [ -f /etc/profile ]
then 
    執(zhí)行的命令
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 不存在

案例: 輸入兩個整數(shù) 使用if判斷兩個整數(shù)誰大誰小或等于
sh count.sh 
30>20
10=10
10<20



[root@shell /server/scripts/day3]# cat count.sh 
#!/bin/sh
read -p "請輸入兩個整數(shù): " num1 num2
expr $num1 + $num2 &>/dev/null
if [ $? -ne 0 ];then
    echo 請輸入正確的數(shù)字
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實際應(yīng)用
菜單:
安裝不同的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

腳本的日志 需要把正確的結(jié)果和錯誤的都追加到日志文件中
[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安裝失敗 請檢查網(wǎng)絡(luò)....."
    fi
else
   echo "wget已經(jīng)安裝不需要重復(fù)安裝"
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


------------------多整數(shù)比較 
[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:
通過不同的系統(tǒng)版本號 安裝不同的YUM源
centos7 和 centos6 yum源不同
判斷網(wǎng)絡(luò)是否通 如果不通使用systemctl restart network

1.獲取版本號
  [root@shell ~]# cat /etc/redhat-release |awk '{print $(NF-1)}'
  7.8.2003
2.通過if判斷 6 7
  
3.6執(zhí)行安裝6的YUM源
   curl  
   wget   使用wget
   判斷wget是否存在 不存在則安裝
7.7執(zhí)行安裝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 "請檢查您的系統(tǒng)版本"
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 "網(wǎng)絡(luò)不通正在重啟網(wǎng)絡(luò)請稍后......"
       systemctl restart network
           ping -c2 -W1 114.114.114.114 &>/dev/null
       [ $? -ne 0 ] && echo "sendmail......管理員請盡快檢查服務(wù)器的網(wǎng)絡(luò)"
    fi
    if  [ `rpm -qa wget|wc -l` -eq 0 ];then
        yum -y install wget &>/dev/null
        if  [ $? -eq 0 ];then
        echo "wget 安裝成功......."
        else
            echo "安裝失敗 檢查網(wǎng)絡(luò)或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源更新不成功 可能是由于網(wǎng)絡(luò)引起"
    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 "請檢查您的系統(tǒng)版本"
        if [ $? -eq 0 ];then
       echo "YUM源更新成功"
    else
       echo "YUM源更新不成功 可能是由于網(wǎng)絡(luò)引起"
    fi
fi

---------------------------------------------------------------------------------------------
二級菜單
PHP MySQL Redis  Nginx 每個服務(wù)有不同的版本

[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 "請輸入你要安裝服務(wù)的編號或者服務(wù)名稱:[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 "請輸入你要安裝服務(wù)的編號或者版本號:[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 "請輸入你要安裝服務(wù)的編號或者版本號:[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猜數(shù)字腳本蜀涨,當用戶輸入的數(shù)字和預(yù)設(shè)數(shù)字(隨機生成一個0-100的數(shù)字)一樣時定嗓,直接退出裸影,否則讓用戶一直輸入勒庄,并且提示用戶的數(shù)字比語塞數(shù)字大或者小

1.知道讓命令隨機生成一個數(shù)字

echo $RANDOM(0-32767)
echo $((RANDOM%100+1))   取余 1-100

2.read讀入讓用戶輸入一個數(shù)字
3.讓用戶輸入的和生成的做比較 輸出結(jié)果

[root@shell /server/scripts/day3]# cat ran.sh
#!/bin/sh
ran=`echo $((RANDOM%100+1))`
read -p "請輸入要猜的數(shù)字1-100: " num
if [ $num -gt $ran ];then
   echo "你輸入的數(shù)字大了"
elif [ $num -lt $ran ];then
   echo "你輸入的數(shù)字小了"
else
   echo "恭喜你猜對了!!"
fi
猜的次數(shù)---------------------------------------
[root@shell /server/scripts/day3]# cat ran.sh 
#!/bin/sh
ran=`echo $((RANDOM%100+1))`
while true
do
        let i++
    read -p "請輸入要猜的數(shù)字1-100: " num
    if [ $num -gt $ran ];then
       echo "你輸入的數(shù)字大了"
    elif [ $num -lt $ran ];then
       echo "你輸入的數(shù)字小了"
    else
       echo "恭喜你猜對了!! 源數(shù)字為$ran"
       echo "總共猜了$i 次"
       exit
    fi
done
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瘫里,隨后出現(xiàn)的幾起案子实蔽,更是在濱河造成了極大的恐慌,老刑警劉巖谨读,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件局装,死亡現(xiàn)場離奇詭異,居然都是意外死亡劳殖,警方通過查閱死者的電腦和手機铐尚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哆姻,“玉大人宣增,你說我怎么就攤上這事∶В” “怎么了统舀?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長劳景。 經(jīng)常有香客問我,道長碉就,這世上最難降的妖魔是什么盟广? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮瓮钥,結(jié)果婚禮上筋量,老公的妹妹穿的比我還像新娘。我一直安慰自己碉熄,他們只是感情好桨武,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锈津,像睡著了一般呀酸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上琼梆,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天性誉,我揣著相機與錄音,去河邊找鬼茎杂。 笑死错览,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的煌往。 我是一名探鬼主播倾哺,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了羞海?” 一聲冷哼從身側(cè)響起忌愚,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扣猫,沒想到半個月后菜循,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體申尤,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年勺远,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胶逢。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖初坠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碟刺,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布半沽,位于F島的核電站吴菠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏做葵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一酿矢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧棠涮,春花似錦谬哀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谦屑。三九已至,卻和暖如春篇梭,著一層夾襖步出監(jiān)牢的瞬間氢橙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工恬偷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悍手,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓袍患,卻偏偏與公主長得像坦康,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子诡延,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • bash的配置文件 用戶登錄系統(tǒng)后滞欠,會啟動一個接口程序,也稱shell程序肆良,一般默認是bash筛璧,而這個程序的啟動,...
    SRE1閱讀 2,503評論 0 1
  • 第1章 小試牛刀 $ 是普通用戶惹恃,# 表示管理員用戶 root夭谤。 shebang:#!。sharp / hash ...
    巴喬書摘閱讀 6,341評論 1 4
  • 1巫糙、終端 終端是交互式工具沮翔,用戶可以通過終端與shell環(huán)境進行交互。shell命令都是在shell終端中輸入并執(zhí)...
    ruready閱讀 468評論 0 1
  • shell腳本基礎(chǔ)知識 2.1 shell的執(zhí)行過程當我們使用sh 執(zhí)行某個腳本時 會從上到下逐條執(zhí)行代碼 碰到...
    張新雨有點胖噢閱讀 272評論 0 0
  • 我是黑夜里大雨紛飛的人啊 1 “又到一年六月曲秉,有人笑有人哭,有人歡樂有人憂愁疲牵,有人驚喜有人失落承二,有的覺得收獲滿滿有...
    陌忘宇閱讀 8,536評論 28 53