0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

小編科普一下19個Shell腳本

網(wǎng)絡(luò)技術(shù)干貨圈 ? 來源:網(wǎng)絡(luò)技術(shù)干貨圈 ? 2023-02-06 09:41 ? 次閱讀

1.判斷/tmp/run目錄是否存在,如果不存在就建立,如果存在就刪除目錄里所有文件

#!/bin/bash
dir=/tmp/run
[-f$dir]&&mv$dir$dir.bak
[-d$dir]&&rm-rf$dir/*||mkdir$dir

2.輸入一個文件的絕對路徑,判斷路徑是否存在,而且輸出是文件還是目錄,如果是字符連接,還得輸出是有效的連接還是無效的連接

#!/bin/bash
read-p"Inputapath:"path
if[-L$path-a-e$path];then
echo"thisiseffectivelink"
elif[-L$path-a!-e$path];then
echo"thisisnoteffectivelink"
elif[-d$path];then
echo"thisisadirector"
elif[-f$path];then
echo"thisisfile"
elif[-e$path];then
echo"thisisaothertypefile"
else
echo"thefileisnotexist"
fi

3.交互模式要求輸入一個ip,然后腳本判斷這個IP 對應(yīng)的主機(jī)是否 能ping 通,輸出結(jié)果類似于:

Server10.1.1.20isDown!最后要求把結(jié)果郵件到本地管理員root@localhost和mail01@localhost

方法一:

#!/bin/bash
read-p"輸入IP地址:"ip
ping-c2$ip>/dev/null2>&1
if[$?-eq0];then
echo"Server$ipisOK."|mail-s'checkserver'root@localhost
else
echo"Server$ipisDown!"|mail-s'checkserver'root@localhost
fi

方法二:

#!/bin/bash
read-p"Inputyourip:"ip
ping-c1$ip&>/dev/null
[$?-eq0]&&echo"server$ipisok"|mail-s"checkserver"root@localhost||echo"server$ipisdown"|mail-s"checkserver"root@localhost

方法三:

#!/bin/bash
tmpfile=`mktemp`
mailaddr="root@localhostmail@localhost"
read-p"輸入IP地址:"ip
ping-c2$ip>/dev/null2>&1
if[$?-eq0];then
echo"Server$ipisUp!">>$tmpfile
else
echo"Server$ipisDown!">>$tmpfile
fi
cat$tmpfile
mail-s"pingserver"$mailaddr

方法四:

#!/bin/bash

rootmail="root@localhost"
tmpfile=`mktemp`
read-p"Inputaip:"ip

ping-c1"$ip"&>/dev/null

retval=$?

if[$retval-eq0];then
echo"Server$ipisup">$tmpfile
else
echo"Server$ipisdown">$tmpfile
fi

cat$tmpfile
mail-s"pingresult"$rootmail

4.寫一個腳本,局域網(wǎng)內(nèi),把能ping通的IP和不能ping通的IP分類,并保存到兩個文本文件里(如果例舉整個網(wǎng)段的254個IP花的時間比較長,可以只分類10個ip10.1.1.1~10) 這只是一個局域網(wǎng)內(nèi)機(jī)器檢查通訊的一個思路。

#!/bin/bash
#清空原來ip文件里的列表
>/tmp/ip_ok
>/tmp/ip_down
ip=10.1.1
#循環(huán)去ping局域網(wǎng)內(nèi)的主機(jī)
for((i=1;i<=10;i++))
do
ping?-c1?$ip.$i?&>/dev/null
test$?-eq0&&echo"$ip.$i"|tee-a/tmp/ip_ok||echo"$ip.$i"|tee-a/tmp/ip_down
done

思考:以上方法可以實(shí)現(xiàn),但是速度很慢,希望并行執(zhí)行

#!/bin/bash
#清空原來ip文件里的列表
>/tmp/ip_ok
>/tmp/ip_down
ip=10.1.1
#循環(huán)去ping局域網(wǎng)內(nèi)的主機(jī)
for((i=1;i<=10;i++))
do
{
ping?-c1?$ip.$i?&>/dev/null
test$?-eq0&&echo"$ip.$i"|tee-a/tmp/ip_ok||echo"$ip.$i"|tee-a/tmp/ip_down
}&
done
wait
echo"ipisok..."

5.寫一個腳本/home/hello.sh,要求當(dāng)給腳本輸入參數(shù)hello時,腳本返回world,給腳本輸入?yún)?shù)world時,腳本返回hello。而腳本沒有參數(shù)或者參數(shù)錯誤時,屏幕上輸出“usage:/home/hello.sh hello or world”

#!/bin/bash
#read-p"Inputastring:"a

if[$#-eq0-o$#-gt1];then
echo"usage:/home/program/test4.shworld|hello"
#echo"usage:`basename$0`world|hello"#更常用的報錯寫法
elif["$1"="hello"];then
echo"world"
elif["$1"="world"];then
echo"hello"
else
echo"usage:/home/program/test4.shworld|hello"
fi

6.自動搭建nfs服務(wù)

#!/bin/bash
#關(guān)閉防火墻和selinux
serviceiptablesstop
chkconfigiptablesoff
setenforce0&>/dev/null
echo"########防火墻和selinux已經(jīng)關(guān)閉########"
#測試網(wǎng)絡(luò),配置內(nèi)網(wǎng)yum源
ping-c1192.168.1.10&>/dev/null
if[$?-eq0];then
echo"########網(wǎng)絡(luò)ok########"
else
echo"########請檢查你的網(wǎng)絡(luò)########"
exit
fi
wget-P/etc/yum.repos.d/ftp://192.168.1.10/demo.repo&>/dev/null
#安裝相關(guān)軟件
yum-yinstall'nfs*'rpcbind&>/dev/null&&echo"########軟件安裝ok#######"
#發(fā)布共享目錄并授權(quán)
read-p"Inputyoursharedir:"dir
[!-d$dir]&&mkdir$dir-p
#授權(quán)
chmod1777$dir
read-p"Inputyoursharehost(192.168.0.0/24(ro)):"host
cat>>/etc/exports</dev/null&&echo"##########rpcbind服務(wù)啟動成功#############"
servicenfsrestart&>/dev/null&&echo"############nfs服務(wù)啟動成功#############"
chkconfigrpcbindon
chkconfignfson
#測試驗(yàn)證
mkdir/u01&>/dev/null
mount.nfslocalhost:$dir/u01
[$?-eq0]&&echo"nfs服務(wù)測試ok,可以正常使用!"
umount/u01

7.將/etc/passwd里的用戶名分類,分為管理員用戶,系統(tǒng)用戶,普通用戶。

分析:
1.根據(jù)用戶的uid來判斷用戶種類
2.用戶的信息保存在/etc/passwd文件中,需要在該文件中獲取UID
3.根據(jù)用戶的uid去判斷
管理員:root0
系統(tǒng)用戶:1-499ftpapache...65534nfsnobody
普通用戶:500-60000
#!/bin/bash
foriin`cat/etc/passwd|cut-d:-f1,3`
do
uid=`echo$i|cut-d:-f2`
name=`echo$i|cut-d:-f1`
[$uid-eq0]&&echo$name>>/tmp/adminuser
[$uid-gt0-a$uid-lt500-o$uid-eq65534]&&echo$name>>/tmp/systemuser
[$uid-ge500-a$uid-ne65534]&&echo$name>>/tmp/normaluser
done

8.寫一個倒計時腳本,要求顯示離2018年1月1日(元旦節(jié))的凌晨0點(diǎn),還有多少天,多少時,多少分,多少秒。

分析:
1.該腳本應(yīng)該是一個死循環(huán),除非當(dāng)前系統(tǒng)時間等于1月1日的凌晨0點(diǎn),要退出循環(huán),并且打印元旦快樂break
2.計算未來時間(1月1日的凌晨0點(diǎn))和當(dāng)前系統(tǒng)時間的時間差時間單位相同并且以相同的時間為一個基準(zhǔn)
需要定義2個變量:
現(xiàn)在時間和未來時間
date命令-d%s
3.計算
假如1月1日和現(xiàn)在時間相差100000s
1天=86400s
1小時=3600s
1分鐘=60
$[100000/86400]=天
$[$[100000%86400]/3600]=小時
$[$[100000%3600]/60]=分鐘
#!/bin/bash
goal=`date+%s-d20181001`

whiletrue或者untilfalse
do
now=`date+%s`
if[$[$goal-$now]-eq0];then
break
fi
day=$[($goal-$now)/86400]
hour=$[($goal-$now)%86400/3600]
minute=$[($goal-$now)%3600/60]
second=$[($goal-$now)%60]
clear
echo"離2018年1月1日還有$day天:$hour時:$minute分:$second秒"
sleep1
done
echo"元旦節(jié)快樂!!!"

9.寫一個腳本把一個目錄內(nèi)的所有空文件都刪除,最后輸出刪除的文件的個數(shù)。

分析:
1.如何判斷文件是空文件-s判斷文件內(nèi)容為非空;判斷空文件則!-seg:[!-sfile]
2.定義一個變量count=0來保存刪除文件的個數(shù),掌握四則運(yùn)算letcount++
3.交互式定義變量讓用戶自己決定清理哪個目錄/data/logs/10個文件循環(huán)次數(shù)由目錄里的文件個數(shù)決定find命令
#!/bin/bash
read-p"輸入一個你要刪除空文件的目錄:"dir

count=0
foriin`find$dir-typef`
do
[!-s$i]&&rm-rf$i&&letcount++##-s表示非空
done

echo"刪除的個數(shù)為:"$count

10.寫一個腳本,將跳板機(jī)上yunwei用戶的公鑰推送到局域網(wǎng)內(nèi)可以ping通的所有機(jī)器上 10.1.1.1~10.1.1.254

分析:
環(huán)境:
jumper-server有yunwei用戶
app1-appn局域網(wǎng)內(nèi)所有可以ping通的機(jī)器


1.在跳板上創(chuàng)建yunwei用戶,并且生成一對秘鑰
2.檢測當(dāng)前局域網(wǎng)中哪些ip是能ping通哪些是不能ping通循環(huán)語句并發(fā)的去檢查
3.在腳本中所有的交互動作需要用到expect實(shí)現(xiàn)

yunwei用戶sudo授權(quán):
visudo
##Allowroottorunanycommandsanywhere
rootALL=(ALL)ALL
yunweiALL=(root)NOPASSWD:ALL,!/sbin/shutdown,!/sbin/init,!/bin/rm-rf/
#!/bin/bash
#檢查局域網(wǎng)中哪些ip是可以ping通,并保存到一個文件
ip1=10.1.1
for((i=1;i<=10;i++))
do
?{
??????ping?-c1?$ip1.$i?&>/dev/null
[$?-eq0]&&echo"$ip1.$i">>ip_up.txt
}&
done
wait

#yunwei用戶生成一對秘鑰(有交互)
[!-f~/.ssh/id_rsa]&&ssh-keygen-P''-f~/.ssh/id_rsa

#將yunwe用戶的公鑰遠(yuǎn)程拷貝到指定的服務(wù)器100循環(huán)
##判斷expect程序是否安裝
{
rpm-qexpect
[$?-ne0]&&sudoyum-yinstallexpect
whilereadip2
do
/usr/bin/expect<<-EOF
?spawn?ssh-copy-id??root@$ip2
?expect?{
??????"yes/no"?{send?"yes
";exp_continue}
??????"password:"?{send?"123
"}
??????}
?expect?eof
?EOF
done/dev/null

#測試驗(yàn)證
remote_ip=`tail-1ip_up.txt`
sshroot@$remote_iphostname
[$?-eq0]&&echo"公鑰推送完畢...."
#!/bin/bash
#pushpublickeytoaap-servers
#將局域網(wǎng)內(nèi)可以ping通的主機(jī)ip保存到一個文件
>ip_up.txt
foriin{2..10}
do
{
ip=10.1.1.$i
ping-c1$ip&>/dev/null
[$?-eq0]&&echo$ip|tee-aip_up.txt
}&//并行放到后臺運(yùn)行
done
wait//等待進(jìn)程結(jié)束
#將yunwei用戶目錄下的公鑰推送到可以ping的服務(wù)器上
#1.判斷yunwei用戶下有沒有公鑰
[!-f~/.ssh/id_rsa.pub]&&ssh-keygen-P""-f~/.ssh/id_rsa

#2.將id_rsa.pub公鑰遠(yuǎn)程推送到指定服務(wù)器
#2.1判斷expect程序是否安裝,沒安裝則安裝它
{
rpm-qexpect
[$?-ne0]&&sudoyum-yinstallexpect

forremote_ipin`catip_up.txt`
do
/usr/bin/expect<<-EOF
?spawn?ssh-copy-id?root@$remote_ip
?expect?{
???????"yes/no"?{?send?"yes
";exp_continue?}
???????"password:"?{?send?"123
"?}
?}
??expect?eof
?EOF
done
}?&>/dev/null
#測試驗(yàn)證
test_ip=`tail-1ip_up.txt`
sshroot@$test_iphostname
test$?-eq0&&echo"公鑰推送成功。"
#!/bin/bash
[!-f~/.ssh/id_rsa.pub]&&ssh-keygen-P""-f~/.ssh/id_rsa
rpm-qexpect
[$?-ne0]&&sudoyum-yinstallexpect
foriin{130..140}
do
ip=192.168.44.$i
ping-c1$ip
[$?-ne0]&&continue
echo$ip>>ip_up.txt
/usr/bin/expect<<-EOF
????????spawn?ssh-copy-id?root@$ip
????????expect?{
????????"yes/no"?{?send?"yes
";exp_continue?}
????????"password:"?{?send?"123456
"?}
????????}
????????expect?eof
????????EOF
done
#測試驗(yàn)證
test_ip=`tail?-1?ip_up.txt`
ssh?root@$test_ip?hostname
test?$??-eq?0?&&?echo?"公鑰推送成功。"

11.

任務(wù)/背景:
現(xiàn)有的跳板機(jī)雖然實(shí)現(xiàn)了統(tǒng)一入口來訪問生產(chǎn)服務(wù)器,yunwei用戶權(quán)限太大可以操作跳板機(jī)上的所有目錄文件,存在數(shù)據(jù)被誤刪的安全隱患,所以希望你做一些安全策略來保證跳板機(jī)的正常使用。

具體要求:

只允許yunwei用戶通過跳板機(jī)遠(yuǎn)程連接后臺的應(yīng)用服務(wù)器做一些維護(hù)操作

公司運(yùn)維人員遠(yuǎn)程通過yunwei用戶連接跳板機(jī)時,跳出以下菜單供選擇:

歡迎使用Jumper-server,請選擇你要操作的主機(jī):
1.DB1-Master
2.DB2-Slave
3.Web1
4.Web2
q.exit

當(dāng)用戶選擇相應(yīng)主機(jī)后,直接免密碼登錄成功

如果用戶不輸入一直提示用戶輸入,直到用戶選擇退出

思路:

需要當(dāng)yunwei用戶登錄時執(zhí)行一個腳本(該腳本放到哪里?)yunwei用戶的家目錄里的.bashrc

腳本中需要打印一個菜單供用戶選擇(case…esac

免密碼登錄(上面第10個腳本推公鑰的腳本)

#!/bin/bash
#公鑰推送成功
trap''12319
#打印菜單用戶選擇
menu(){
cat<<-EOF
歡迎使用Jumper-server,請選擇你要操作的主機(jī):
1.?DB1-Master
2.?DB2-Slave
3.?Web1
4.?Web2
h.?help
q.?exit
EOF
}

#調(diào)用函數(shù)來打印菜單
menu
while?true
do
read?-p?"請輸入你要選擇的主機(jī)[h?for?help]:"?host

#通過case語句來匹配用戶所輸入的主機(jī)
case?$host?in
?1|DB1)
?ssh?root@10.1.1.1
?;;
?2|DB2)
?ssh?root@10.1.1.2
?;;
?3|web1)
?ssh?root@10.1.1.250
?;;
?h|help)
?clear;menu
?;;
?q|quit)
?exit
?;;
esac
done


#!/bin/bash
#jumper-server
#菜單打印
trap?''?1?2?3?
while?true
do
cat?<<-END
歡迎使用Jumper-server,請選擇你要操作的主機(jī):
1.?DB1-Master
2.?DB2-Slave
3.?Web1
4.?Web2
5.?exit
END
#讓用戶選擇相應(yīng)的操作
read?-p?"請輸入你要操作的主機(jī):"?host
case?$host?in
?1)
?ssh?root@10.1.1.2
?;;
?2)
?ssh?root@10.1.1.3
?;;
?3)
?ssh?root@10.1.1.4
?;;
?5)
?exit
?;;
?*)
?clear
?echo?"輸入錯誤,請重新輸入..."
?;;
esac
done

12.寫一個腳本,統(tǒng)計web服務(wù)的不同連接狀態(tài)個數(shù)

#!/bin/bash
#count_http_80_state
#統(tǒng)計每個狀態(tài)的個數(shù)
declare-ASTATE
states=`ss-ant|grep80|cut-d''-f1`
foriin$states
do
letSTATE[$i]++
done
#通過遍歷數(shù)組里的索引和元素打印出來
forjin${!STATE[@]}
do
echo$j:${STATE[$j]}
done

13.寫一個自動搭建apache服務(wù)的腳本,要求如下:

1、用戶輸入web服務(wù)器的IP、域名以及數(shù)據(jù)根目錄
2、如果用戶不輸入則一直提示輸入,直到輸入為止
3、當(dāng)訪問www.test.cc時可以訪問到數(shù)據(jù)根目錄里的首頁文件“thisistestpage”
#!/bin/bash
#定義函數(shù)實(shí)現(xiàn)用戶不輸入則一直提示輸入,直到輸入為止
input_fun(){
input_var=''
while[-z$input_var]
do
read-p"$1"input_var
done
echo$input_var
}
#調(diào)用函數(shù)并且獲取用戶輸入web服務(wù)器的IP、域名以及數(shù)據(jù)根目錄
IP=`input_fun請輸入你的IP地址:`
name=`input_fun請輸入你的域名:`
dir=`input_fun請輸入你的數(shù)據(jù)根目錄:`
#將ip與主機(jī)名輸入到hosts文件里
cat>>/etc/hosts<$dir/index.html
#yum安裝apache
yum-yinstallhttpd&>/dev/null
#發(fā)布虛擬主機(jī)
cat>>/etc/httpd/conf/httpd.conf<<-EOF
NameVirtualHost?*:80

ServerAdminwebmaster@dummy-host.example.com
DocumentRoot$dir
ServerName$name
ErrorLoglogs/dummy-host.example.com-error_log
CustomLoglogs/dummy-host.example.com-access_logcommon

EOF
#啟動
servicehttpdrestart&>/dev/null
echo"====apache啟動成功===="
#測試驗(yàn)證
curlhttp://$name

14.需求:寫一個腳本讓用戶輸入基本信息(姓名,性別,年齡),如不輸入一直提示輸入,最后根據(jù)用戶的信息輸出相對應(yīng)的內(nèi)容

思路:

循環(huán)直到輸入字符串不為空 -z -n

根據(jù)用戶輸入信息做出匹配判斷

#!/bin/bash
#該函數(shù)實(shí)現(xiàn)用戶如果不輸入內(nèi)容則一直循環(huán)直到用戶輸入為止,并且將用戶輸入的內(nèi)容打印出來
input_fun()
{
input_var=""
output_var=$1
while[-z$input_var]
do
read-p"$output_var"input_var
done
echo$input_var
}


或者
fun(){
read-p"請輸入您的姓名:"name
if[-z$name];then
fun
else
echo"你好,$name!"
fi
}
fun


#調(diào)用函數(shù)并且獲取用戶的姓名、性別、年齡分別賦值給name、sex、age變量
name=$(input_fun請輸入你的姓名:)
sex=$(input_fun請輸入你的性別:)
age=$(input_fun請輸入你的年齡:)

#根據(jù)用戶輸入的性別進(jìn)行匹配判斷
#根據(jù)用戶所輸入的內(nèi)容進(jìn)行判斷輸入
case$sexin
man|男)
if[$age-ge18-a$age-le25];then
echo"哥們,娶媳婦了嗎"
elif[$age-gt25-a$age-le35];then
echo"要擔(dān)起家庭的責(zé)任"
elif[$age-lt18];then
echo"小伙子不錯"
else
echo"$name先生,你油膩了嗎?"

fi
;;
woman|女)
echo"$name小姐姐你好漂亮"
;;
*)
echo"你是泰國來的嗎?"
;;

esac

15.寫一個初始化系統(tǒng)的腳本

1)自動修改主機(jī)名(如:ip是192.168.0.88,則主機(jī)名改為server88.itcast.cc)
a.更改文件非交互式sed
/etc/sysconfig/network
b.將本主機(jī)的IP截取出來賦值給一個變量ip;再然后將ip變量里以.分割的最后一位賦值給另一個變量ip1
2)自動配置可用的yum源
3)自動關(guān)閉防火墻和selinux
#!/bin/bash
ip=`ifconfigeth1|sed-n'2p'|sed's/.*addr:(.*)Bcast.*/1/g'`
ip1=`echo$ip|cut-d.-f4`
#修改主機(jī)名
sed-i"/HOSTNAME=/cHOSTNAME=server$ip1.itcast.cc"/etc/sysconfig/network
echo"$ipserver$ip1.itcast.cc">>/etc/hosts
#配置yum源
mount/dev/sr0/mnt/&>/dev/null
cat>/etc/yum.repos.d/local.repo<<-EOF
[local]
name=local?yum
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF
#關(guān)閉防火墻和selinux
service?iptables?stop?&>/dev/null
setenforce0&>/dev/null
#sed-i'/SELINUX=/cSELINUX=disabled'/etc/selinux/config

16.寫一個搭建ftp服務(wù)的腳本,要求如下:

1)不支持本地用戶登錄
2)匿名用戶可以上傳新建刪除
3)匿名用戶限速500KBps
#!/bin/bash
#安裝軟件
read-p"請輸入需要安裝的軟件:"s
yum-yinstall$s&>/dev/null
#備份配置文件
c=/etc/vsftpd/vsftpd.conf
cp$c$c.bak
#修改配置文件
sed-i'/local_enable/clocal_enable=NO'$c
sed-i'$aanon_upload_enable=YES'$c
sed-i'$aanon_mkdir_write_enable=YES'$c
sed-i'$aanon_other_write_enable=YES'$c
sed-i'$aanon_max_rate=512000'$c
#啟動服務(wù)
servicevsftpdrestart&>/dev/null
echo'vsftpd啟動成功'
#測試驗(yàn)證
chmod777/var/ftp/pub
touch/var/ftp/pub/1.txt
ip=`ifconfigeth1|sed-n'2p'|sed's/.*addr:(.*)Bcast.*/1/g'`
cd/tmp
lftp$ip<

17.寫一個自動檢測磁盤使用率的腳本,當(dāng)磁盤使用空間達(dá)到90%以上時,需要發(fā)送郵件給相關(guān)人員

#!/bin/bash
#Name:check_space.sh
#Desc:checkdiskspace
/bin/df-h>df.txt
use=`catdf.txt|awk'{print$5}'|grep-o'[0-9]+'`
foriin$use
do
[$i-ge90]&&echonoticediskspace:`grep$idf.txt`|mailtom
done
rm-fdf.txt

18.寫一個腳本監(jiān)控系統(tǒng)內(nèi)存和交換分區(qū)使用情況

#!/bin/bash
OIFS=$IFS初始化默認(rèn)分隔符
IFS="
"定義默認(rèn)分隔符
file=`free-m|sed-nr'/Mem|Swap/p'|awk'{print$4,$2}'`
mem=`echo$file|head-1`
swap=`echo$file|tail-1`
echo$mem|awk'{if(($1/$2)*100<=50)?print?"物理內(nèi)存空間需要留意,剩余"$1"M";else?print?"物理內(nèi)存在正常范圍"}'
??echo?$swap?|awk?'{if(($1/$2)*100<=50)?print?"交換空間需要留意,剩余"$1"M";else?print?"交換空間在正常范圍"}'
#!/bin/bash
#監(jiān)控系統(tǒng)內(nèi)存和交換分區(qū)使用情況
#/shell05/free.sh
#取當(dāng)前時間
date>>/tmp/date.txt
#取物理內(nèi)存free值
echo"Mem-free:`free-m|grepMem|awk'{print$4}'`M">>/tmp/mem-free.txt
#取緩沖區(qū)free值
echo"buffers/cache-free:`free-m|grep-|awk'{print$4}'`M">>/tmp/buffers-free.txt
#取Swap區(qū)free值
echo"Swap-free:`free-m|grepSwap|awk'{print$4}'`M">>/tmp/swap-free.txt
#將時間與相關(guān)數(shù)據(jù)重新寫入新文件
paste/tmp/date.txt/tmp/mem-free.txt/tmp/buffers-free.txt/tmp/swap-free.txt>/tmp/free.txt
#發(fā)送監(jiān)控郵件
mail-s"內(nèi)存監(jiān)控報告"root@localhost

19.輸入一個IP地址,使用腳本判斷其合法性:必須符合ip地址規(guī)范,第1、4位不能以0開頭,不能大于255不能小于0

#!/bin/bash
#ValidIP
#/shell05/valid.sh
read-p"請輸入要檢查的IP:"IP
ifecho$IP|grep-E"^([0-9]{1,3}.){3}[0-9]{1,3}$"&>/dev/null;then
a1=`echo$IP|cut-d.-f1`
a2=`echo$IP|cut-d.-f2`
a3=`echo$IP|cut-d.-f3`
a4=`echo$IP|cut-d.-f4`
if[$a1-gt0-a$a1-le255-a$a2-le255-a$a3-le255-a$a4-gt0-a$a4-le255];then
echo"$IPavailable!"
else
echo"$IPnotavailable!"
fi
else
echo"IPformaterror!"
fi






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 局域網(wǎng)
    +關(guān)注

    關(guān)注

    5

    文章

    734

    瀏覽量

    46202
  • TMP
    TMP
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    31826
  • NFS
    NFS
    +關(guān)注

    關(guān)注

    1

    文章

    52

    瀏覽量

    26063
  • Shell
    +關(guān)注

    關(guān)注

    1

    文章

    360

    瀏覽量

    23234

原文標(biāo)題:這19個Shell腳本值得收藏!

文章出處:【微信號:網(wǎng)絡(luò)技術(shù)干貨圈,微信公眾號:網(wǎng)絡(luò)技術(shù)干貨圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    shell腳本進(jìn)階】幾個常用的shell進(jìn)階腳本

    shell腳本進(jìn)階】幾個常用的shell進(jìn)階腳本
    的頭像 發(fā)表于 09-19 08:59 ?1793次閱讀
    【<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>進(jìn)階】幾個常用的<b class='flag-5'>shell</b>進(jìn)階<b class='flag-5'>腳本</b>

    嵌入式Linux入門(五、Shell腳本編程上:認(rèn)識Shell腳本

    大家好,是矜辰所致,嵌入式 Linux入 門第五課,本課開始簡單學(xué)習(xí)一下 Shell 腳本編程。
    的頭像 發(fā)表于 07-13 16:10 ?1435次閱讀
    嵌入式Linux入門(五、<b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>編程上:認(rèn)識<b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>)

    100Linux Shell腳本總結(jié)

    不知道大家有沒有發(fā)現(xiàn),會編寫shell腳本的運(yùn)維,工資不會低,并且他的工作會很輕松!今天浩道跟大家分享每一個Linux運(yùn)維應(yīng)知必會的100shel
    的頭像 發(fā)表于 12-05 09:28 ?1039次閱讀

    科普一下RK3288安卓主板的優(yōu)勢特點(diǎn)有哪些呢

    科普一下RK3288安卓主板的優(yōu)勢特點(diǎn)有哪些呢
    發(fā)表于 03-03 13:33

    科普一下RK3399 Audio的功能有哪些呢

    科普一下RK3399 Audio的功能有哪些呢?
    發(fā)表于 03-04 12:47

    科普一下RK3399/libdrm/modetest

    科普一下RK3399/libdrm/modetest
    發(fā)表于 03-07 07:06

    科普一下RK3328 SoC有何功能呢

    科普一下RK3328 SoC有何功能呢?
    發(fā)表于 03-09 07:28

    如何做才能學(xué)好Shell腳本的經(jīng)驗(yàn)總結(jié)

    大多同學(xué)反饋Shell腳本不容易學(xué),感覺學(xué)完了Shell腳本這部分課程,還是不能寫出腳本來。 我來幫大家分析
    的頭像 發(fā)表于 01-09 18:23 ?6170次閱讀
    如何做才能學(xué)好<b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>的經(jīng)驗(yàn)總結(jié)

    shell腳本最簡明的教程

    Shell腳本,就是利用Shell的命令解釋的功能,對純文本的文件進(jìn)行解析,然后執(zhí)行這些功能,也可以說
    的頭像 發(fā)表于 10-16 11:27 ?4692次閱讀
    <b class='flag-5'>shell</b><b class='flag-5'>腳本</b>最簡明的教程

    如何創(chuàng)建和執(zhí)行簡單的Linux shell腳本

     如果您愿意要嘗試更長的shell腳本,請將下面的shell腳本(并附加為PDF和ODT文件)復(fù)制到文本編輯器中,保存,使其可執(zhí)行并運(yùn)行。當(dāng)您了解更多Linux命令時,您可以創(chuàng)建更復(fù)雜
    的頭像 發(fā)表于 11-06 17:28 ?1.3w次閱讀

    109實(shí)用shell腳本分享

    Shell腳本,就是利用Shell的命令解釋的功能,對純文本的文件進(jìn)行解析,然后執(zhí)行這些功能,也可以說
    的頭像 發(fā)表于 03-16 08:58 ?2542次閱讀

    100Shell腳本經(jīng)典案例解析

    今天浩道跟大家分享100Linux Shell腳本經(jīng)典案例,讓你次擼夠。
    的頭像 發(fā)表于 02-10 13:51 ?2422次閱讀

    shell腳本基礎(chǔ)知識

    shell腳本文件,里面存放的是特定格式的指令,系統(tǒng)可以使用腳本解析器翻譯或解析指令并執(zhí)行(無需編譯),
    的頭像 發(fā)表于 04-17 15:00 ?1011次閱讀

    Linux Shell腳本經(jīng)典案例分享

    ? 作為名 Linux 運(yùn)維工程師,會寫好的腳本不僅能提高工作效率,還能有更多的時間做自己的事。最近在網(wǎng)上沖浪的時候,發(fā)現(xiàn)大家對Shell腳本都有“心結(jié)”,要么覺得自己寫出來不好
    發(fā)表于 06-16 14:03 ?609次閱讀
    Linux <b class='flag-5'>Shell</b><b class='flag-5'>腳本</b>經(jīng)典案例分享

    分享249拿來即用的shell腳本

    ? 由于腳本案例太多,在此僅展示部分,完整版領(lǐng)取方式請見文末 ? ? ? 249拿來即用的shell腳本! ? 這249
    的頭像 發(fā)表于 07-07 10:52 ?1086次閱讀
    分享249<b class='flag-5'>個</b>拿來即用的<b class='flag-5'>shell</b><b class='flag-5'>腳本</b>