1. 程式人生 > >SHELL簡單腳本編寫

SHELL簡單腳本編寫

腳本基礎篇

vim /root/7.sh

#!/bin/bash

X=$[RANDOM%10+1]

read -p "[1-10]你猜:" cai

if [ $cai -eq $X ];then

echo 恭喜你猜對了

exit

elif [ $num -gt $X ];then

echo 猜大了

else

echo 太小了

fi


vim /root/6.sh

#!/bin/bash

read -p "請輸入一個軟件包:" b

b=$(rpm -qa | grep "$a")

if [[ -z $b ]];then

echo "沒有安裝"

else

echo "已經安裝"

fi


vim /root/5.sh

#!/bin/bash

netstat -anptu | grep httpd &> /dev/null

if [ $? -eq 0 ];then

echo "已經啟動"

else

echo "沒有啟動"

fi

vim /root/4.sh

#!/bin/bash

ping -c3 -i0.2 -w1 $1 &> /dev/null

if [ $? -eq 0 ];then

echo "host $1 up"

else

echo "host $1 down"

fi


vim /root/3.sh

#!/bin/bash

[ -d /mnt ] || mkdir /mnt

mount /dev/cdrom /mnt


vim /root/2.sh


#!/bin/bash

[ ! -d /mnt ] && mkdir /mnt

mount /dev/cdrom /mnt


vim /root/1.sh

#!/bin/bash

num=$(who | wc -l)

[ $num -gt 10 ] && mail -s errot root < mail.txt


crontab -e


* * * * * /root/1.sh

vim /mail.txt

隔壁老王來了



ping 176.130.8.50-150,開啟的有多少個,沒有開啟的有多少個


#!/bin/bash

x=0

y=0

for i in {100..150}

do

ping -c2 -i0.1 -W1 176.130.8.$i &> /dev/null

if [ $? -eq 0 ];then

echo "176.130.8.$i is up"

let x++

else

echo "176.130.8.$i is down"

let y++

fi

done

echo "開機的有$x個, 關機的有$y個"



求1+2+3+4+5......100的和

#!/bin/bash

sum=0

for i in {1..100}

do

let sum+=i

done

echo "總和$sum"

求1*2*3*4......30的積

#!/bin/bash

sum=1

for i in {1..50}

do

let sum\*=i

done

echo "總共是 $sum"


將/var/log每個文件,單獨打包,保存到/tmp中


for i in `ls /var/log`

do

tar -czf /tmp/$i.tar.gz /var/log/$i

done


----------輔助理解/var/log/文件理解的打包過程

for i in a.txt b.txt c.txt d.txt

do

i=a.txt

tar -czf /tmp/$i.tar.gz /var/log/$i

done


利用Shell腳本,猜一個隨機數

#!/bin/bash

y=0

num=$[RANDOM%100+1]

while :

do

read -p "[1-100] , 你猜一個數:" cai

let y++

if [ $cai -eq $num ];then

echo "恭喜猜對了, 你猜了$y次"

exit

elif [ $cai -gt $num ];then

echo "猜大了"

else

echo "猜小了"

fi

done


case語句

如果參數是redhat,則顯示是fedora

如過參數是fedora,則顯示是redhat

如果參數是其他,則顯示是Useage


#!/bin/bash

case "$1" in

redhat)

echo "fedora";;

fedora)

echo "redhat";;

*)

echo "Usage";;

esac


case語句(判斷語句),簡化if語句-----------只能進行兩個值之間是否相等

#!/bin/bash

case "$1" in

-n)

touch $2;;

-e)

vim $2;;

-c)

cat $2;;

-r)

rm -rf $2;;

*)

echo "Usage:$0 (-n|-e|-c|-r|)" 文件名

esac


Shell調用函數----------就是給一段命令取個別名(函數)

基本格式:函數名 (){

大括號中間跟命令

}


調用函數:函數名

ll(ls -l)


#!/bin/bash

cecho (){

echo -e "\033[$1m$2\033[0m"

}

cecho 32 OK

cecho 34 Error

cecho 35 Waring

3X:是字體顏色

4X:是背景顏色

X:表示樣式




While語句


固定格式:while


i=1

while [ $i -lt 10 ]

do

echo "你好"

let i++

done



break,contine,exit給腳本的間接中斷在重復使用

(1)break中斷整個循環體

(2)continue中斷本次循環,立即跳入下一次循環

(3)exit中斷整個腳本


#!/bin/bash

for i in {1..5}

do

[ $i -eq 3 ] && break

echo $i

done

echo OK


#!/bin/bash

for i in {1..5}

do

[ $i -eq 3 ] && continue

echo $i

done

echo OK


#!/bin/bash

for i in {1..5}

do

[ $i -eq 3 ] && exit

echo $i

done

echo OK


#!/bin/bash

sum=0

while :

do

read -p "請輸入數字[0結束]:" xx

[ $xx -eq 0 ] && break

let sum+=xx

done

echo "總和是$sum"


打印9*9乘法表


#!/bin/bash

for i in `seq 9`

do

for x in `seq $i`

do

echo -n "$i*$x=$[$i*$x]"

done

echo

done


猴子摘香蕉

#!/bin/bash

x=1

for i in {1..8}

do

let x=x+1

let x=x*2

done

echo $x


國際象棋


#!/bin/bash

b=1

while [ $b -le 4 ]

do

for i in {1..4}

do

echo -en "\033[40m \033[0m"

echo -en "\033[47m \033[0m"

done

echo

for i in {1..4}

do

echo -en "\033[47m \033[0m"

echo -en "\033[40m \033[0m"

done

echo

if [ $b -eq 2 ];then

echo -e "\033[47m 楚河漢界 \033[0m"

fi

let b++

done


#!/bin/bash

read -p "請輸入用戶名:" name

read -p "請輸入用戶密碼:" pass

if [ -z "$name" ];then

echo "必須輸入用戶名"

exit

fi

pass=${pass:-123456}

useradd $name

echo "$pass" | passwd --stdin $name


提示用戶輸入一個數:如果輸入的是10,則腳本1+2+3+4.....10

如果輸入的是20,則腳本1+2+3....+20

如過沒有輸入,則腳本1+2+3+4......+100

#!/bin/bash

read -p "請輸入一個數字:" xx

xx=${xx:-100}

sum=0

for i in `seq $xx`

do

let sum+=i

done

echo "總和是$sum"

創建文件touch {a,b,c,d}.txt,把 .txt後綴改為 .doc

#!/bin/bash

for i in `ls *.txt`

do

mv $i ${i%.txt}.txt

done

改變參數,賦予變量

#!/bin/bash

for i in `ls *.$1`

do

mv $i ${i%.$1}.$2

done


#!/bin/bash

sum=0

for i in `seq 2 2 100`

do

let sum=sum+i

done

echo "$sum"


sum=0

for i in `seq 1 2 99`

do

let sum+=i

done

echo "總和是$sum"


#tmp=0

read -p "shu zi" num

num=${num:-100}

for i in `seq 2 2 $num`

do

let tmp+=i

done

echo $tmp


#!/bin/bash

case $1 in

start)

if [ -f /usr/local/nginx/logs/nginx.pid ];then

echo "正在運行"

else

/usr/local/nginx/sbin/nginx

echo "啟動成功"

fi;;

stop)

if [ ! -f /usr/local/nginx/logs/nginx.pid ];then

echo "已經關閉"

else

/usr/local/nginx/sbin/nginx -s stop

echo "關閉成功"

fi;;

restart)

if [ -f /usr/local/nginx/logs/nginx.pid ];then

/usr/local/nginx/sbin/nginx -s stop

/usr/local/nginx/sbin/nginx

echo "重啟成功"

else

/usr/local/nginx/sbin/nginx

echo "重啟成功"

fi;;

status)

if [ -f /usr/local/nginx/logs/nginx.pid ];then

netstat -ntulp |grep nginx

else

echo "沒有運行"

fi;;

*)

echo "Error";;

esac


SHELL簡單腳本編寫