運維—shell腳本
阿新 • • 發佈:2018-11-29
border password 其他 plain 依次 查看 技術 次數 bin
下面我為大家介紹一下shell腳本的寫法。
1.在linux下會寫shell腳本是非常重要的,下面我參照例子給大家展示幾個腳本,順帶這學習shell 的語法:
任何語言都是Hello World,第一個腳本肯定與Hello World是離不開的:
#!/bin/sh
a="Hello World!"
num=5
echo "a is : $a num is : ${num}nd"
運行結果: a is : Hello World! num is : 5nd
2.下面帶著大家學學if語句:
先拋出一個問題:寫一個腳本,判斷當前所用的shell
#!/bin/sh #註意if的空格以及[]裏面的空格這裏錯了半天啊 if [ "$SHELL" = "/bin/bash" ];then echo "your login shell is the bash \n" echo "SHELL is : $SHELL" else echo "your login shell is not bash but $SHELL" fi #[ -f "somefile" ] : 判斷是否是一個文件 #[ -x "/bin/ls" ] : 判斷/bin/ls是否存在並有可執行權限 #{ -n "$var" } : 判斷$var變量是否有值 #[ "&a" = "$b" ] : 判斷$a和$b是否相等 [ -f "/etc/shadow" ] && echo "This computer uses shadow passwords" if [ -f "/etc/shadow" ];then echo "電腦密碼使用隱藏字符" else echo "並沒有" fi
#是註釋的意思
3.為了讓大家更加熟練的運用shell,那麽練習下吧,問題:寫一個腳本使其從一個文件裏面讀入有echo的語句,並把其寫在本文件末尾;
#!/bin/sh #-r代表此文件是否可讀,具體見man test mailfolder=/home/handsome/work/linux_learn/shell_learn/readme.txt #[ -r "$mailfolder" ] || { echo "Can not read $mailfolder" ; exit 1;} #echo "$mailfolder has mail from : " #grep "^echo " $mailfolder if [ -r "$mailfolder" ];then echo "$mailfolder has massage from : " echo | grep ‘^echo ‘ $mailfolder >> readme2.txt chmod +r readme2.txt cat readme2.txt >> $mailfolder rm -f readme2.txt else echo "Can not read $mailfolder" touch $mailfolder chmod +rw $mailfolder echo "echo 天將降大任於斯人也! " >> $mailfolder fi
這裏由於重定向不能本文見輸出到本文件輸出,可以新建個文件,再重定向到這個文件
4.接下來,我們練習下while的用法
問題:寫一個腳本(不建議使用for變量--for是根據空格取值)
1.設定變量FILE的值為/etc/passwd
2.依次向/etc/passwd中的每個用戶問好,並且說出對方的ID什麽(Hello,root,your UID is0.)
3.統計一個有多少個用戶
#!/bin/bash fl=/etc/passwd count=`cat $fl | wc -l` #下面是一個管道,下面循環讀文件中的每一行 cat $fl | while read line do user=`echo $line|awk -F ‘:‘ ‘{print $1}‘` #代表以 :分段$1就是取第1段 uid=`echo $line|awk -F ‘:‘ ‘{print $3}‘` echo "hello, $user Your UID is $uid" done echo "====User_count:$count====" #前面求得的用戶數
這裏要註意到awk的用法
5.介紹下for語句
問題:寫個腳本;
1.切換工作目錄至/tmp
2.依次向/tmp目錄中的每個文件或子目錄問好(Hello,log)
3.統計/tmp目錄下共有多個文件,並顯示出來
1 2 3 4 5 6 7 8 |
#!/bin/bash
cd /tmp
for i in /tmp/*
do
echo "Hello , $i"
done
count=`ls -l|grep ‘^-‘ |wc -l`
echo "====file_count:$count===="
|
6.那麽問題來了:
如何傳遞兩個整數給腳本,讓腳本分別計算並顯示這兩個整數的和,差,積,商
#!/bin/bash
a=$1
b=$2
[ -z $a ] && echo "please \$1 number1" && exit 1
[ -z $b ] && echo "please \$2 number2" && exit 2
[ ! $# -eq 2 ] && echo "--please num1 num2" && exit 3
# $#傳遞到腳本的參數個數
# -eq相當於=, -ne相當於不等於, -ge >= , -gt >, -le <=, -lt <
echo "$a + $b = $(($a+$b))"
echo "$a - $b = $(($a - $b))"
echo "$a * $b = $(($a*$b))"
echo "$a / $b = $(($a/$b))"
這裏要註意的是,需要傳入兩個參數;
具體用到的一些知識請看下面:
7.寫一個腳本;求1到100的和?
#!/bin/bash
sum=0
i=1
while [ $i -le 100 ]
do
sum=$(($sum + $i))
i=$(($i+1))
done
echo "$sum"
這個腳本就so easy了;
8.查看IP地址
我們可以 通過ping命令測試192.168.0.151到192.168.0.254之間的所有主機是否在線
#!/bin/bash
for i in `seq 2 254`
do
ping -c1 -w1 192.168.51.$i > /dev/null 2>&1
#-c可以指定ping的次數,-w測試的時間 -w 1就是1秒中無論成功失敗都結束
#-c -w後面都要輸入參數所以都要帶上l
#$?代表最後命令退出狀態,0代表沒錯,其他代表有錯
[ $? -eq 0 ] && echo "192.168.51.$i IP is UP!" || echo "192.168.51.$i IP is down!"
done
運維—shell腳本