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