shell是乙個面向過程的解釋型語言;
/bin/sh
/bin/bash
/bin/ash
/bin/csh
/bin/tcsh
/sbin/nolgin
#! /bin/bash #定**釋器
定義變數
命令/迴圈/判斷/函式(fuction)
輸出echo -e#啟用逃逸字元 -t / -n #步子到換行
讀取 read -t#定義超時時間 / -p #指定提示字元
退出 exit #0表示執行成功
date=$(date -d '+1 day' +%y-%m) #可輸出多行文字,+前乙個為格式,-後乙個為符號
date =`date -d '+1 day' +%y-%m` #一行輸出
if [-n/-z $string] #如果string非空/空,返回true;
if [xx1 -d/-a/-o xx2] #不存在、並列(檔案1比檔案2新)、或;
$n:第n個引數;
$#:引數個數
$?:執行狀態;
$@/$*:所有引數(分開/整體)
$$:程序id
seq a b
seq -w b
for i in words; do
***done
if [ i -gt x (-a/-o ***) ];then
***fiif cat /etc/issue|grep -qai 10.04
if [ $? -eq 0 ];
if [-n/-z/-s $string]
while read line; do
***done
# !/bin/bash
df -p | sed 1d > /tmp/usage #刪除第一行用sed,-p表示不會因為文字過長而換行
while read line; do
use=`echo $line | awk -f' ' '' | sed 's/%//'`
fs=`echo $line | awk -f' ' ''` #最該傳送的是掛載點
if [ $use -gt 1 ]; then
mail -s'warning!high usage!' root@localhost << end #用end換行符用於互動,代替回車的功能
$fs is in a high usage $use% #正文部分
end #表示結束輸出 #cmd輸入mail檢視郵件,file檢視所有郵件狀態;
fi done < /tmp/usage
法一:
# !/bin/bash
ip=`netstat -nut | awk '' | cut -d: -f1 | grep -o '.*[0-9]' | awk 'end' | sort -n
awk ''`
echo $ip > /data/net #重定向只能是標準輸入,利用echo
while read line; do
iptables -i input -s $ip -j drop
echo 'this $ip is drop!'
done < /data/net #需要導進檔案才能讀行
法二: # !/bin/bash
ip=`netstat -nut | awk '' | cut -d: -f1 | grep -o '.*[0-9]' | awk 'end' | sort -n | awk ''`
source /etc/profile #加入開機自啟動
for ip in $ip; do
iptables -i input -s $ip -j drop
echo 'this $ip is drop!'
done
法三:思考until
ping [option] [ip]
-c #連線次數;
-w #超時時間;
#! /bin/bash
net=10.10.10.0/24
net=$
for i in `seq 254`; do #for可以用while或者until代替
(ping -c 1 -w 3 $net.$i
if [ $? -eq 0 ]; then
echo $net.$i >> /tmp/test
fi) #()表示另起乙個子程序,並行程序,可以提高效率
#生產環境中,上萬流量級別了,不能亂用,否則程序卡死;
done
script
if [ "$cloud_mysql_env" == "test" ]; then
env cloud_mysql_env=test exec /opt/cloud_mysql/bin/uwsgi --die-on-term --ini /opt/cloud_mysql/conf/uwsgi.ini
else
exec /opt/cloud_mysql/bin/uwsgi --die-on-term --ini /opt/cloud_mysql/conf/uwsgi.ini
fiend script
-sp #ping掃瞄,僅發現目標主機是否存活;
nmap -sp 10.10.10.0/24 | grep -o '10.10.10.*'
[root@shell scripts]# viuseradd.sh
#! /bin/bash
. /etc/init.d/functions
path=/server/scripts #所有操作均定義在指令碼裡面
userdb=$path/user.db
faildb=$path/fail_user.db
[ -d "$path" ] || mkdir-p $path
[ -f "$userdb" ] ||touch $userdb
[ -f "$faildb" ] ||touch $faildb
#思路就是存在即建立
for n in $(seq -w 10) #seq -w 10 ——> seq `1,10`
do passwd=`echo $(date+%t%n)$random|md5sum|cut -c 2-9` #$random表示內部變數,可以建立隨機數;date+x%設定系統時間格式
useradd oldboy$n >&/dev/null&& user_status=$?
echo "$passwd"|passwd --stdinoldboy$n >&/dev/null && pass_status=$? #用echo *** | yyy --stdin zzz,其中***為和終端互動內容
if [ $user_status -eq 0 -a $pass_status -eq0 ];then #建立成功則返回值為0,$?表示返回值;
action "adduser oldboy$n"/bin/true
echo -e "user:\toldboy$npass:$passwd" >>$userdb #小心!追加式重定向
else
action "adduser oldboy$n"/bin/false
echo -e "user:\toldboy$npass:$passwd" >>$faildb #-e表示啟用轉義字元
fidone
思路
1、匯入time和os模組;
2、變數當前時間、磁碟狀態、表示形態;
3、實施磁碟狀態;
4、寫入資料、刷清資料、關閉資料
#當前時間
time.strtime(』%y-%m-%d』)
#磁碟狀態
os.open('df -h ',『r』).readline()
#表示形態
『\n』.join(***)
#寫入資料
f.write(』%s』 % str)、f.flush() 、f.close()
shell指令碼基礎
執行shell指令碼有兩種方法 1 作為可執行程式 將上面的 儲存為 test.sh,並 cd 到相應目錄 chmod x test.sh 使指令碼具有執行許可權 test.sh 執行指令碼 注意,一定要寫成 test.sh,而不是 test.sh,執行其它二進位制的程式也一樣,直接寫 test.s...
shell指令碼基礎
shell定義 shell是命令解析器,將使用者的輸入的指令轉化為機器可以執行的程式。和c語言不同,指令碼有自己的語法。比較常用的格式是 bin bash或者 bin sh 如 這是乙個判斷輸入字元型別的程式 bin bash read key case in a z echo upperlette...
Shell指令碼基礎
1 shell是使用者與核心進行互動操作的一種介面,目前最流行的shell稱為bash shell 2 shell也是一門程式語言 解釋型的程式語言 即shell指令碼 3 乙個系統可以存在多個shell,可以通過cat etc shells命令檢視系統中安裝的shell,不同的shell可能支援的...