Shell指令碼基礎架構

2021-09-26 23:13:59 字數 4164 閱讀 1051

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可能支援的...