天天看點

shell 常用

./sss xxx

$1 $2

$#

$0

$?

tail -1

head -1

awk '{ if ($1=="FIND") print $2 }'

如何調試bash腳本

#!/bin/bash -xv

function aa(){

echo "xx"

}

let $a=$b+$c

$a=(($b+$c))

if[ -f /xx/xx ]

then

xxx

fi

for i in $(ls)

do

ccc

done

head -10 xx|tail -1

指令“export” 有什麼用 ?

使變量在子shell 中可用。

nohup command&

'和" 引号有什麼差別 ?

' - 當我們不希望把變量轉換為值的時候使用它。

" - 會計算所有變量的值并用值代替。

exec >xxx.txt 2>&1

echo ${variable:x:y} 

 如果給定字元串variable="User:123:321:/home/dir",如何隻用echo指令擷取home_dir ?

echo ${variable#*:*:*:}

echo ${variable##*:}

 如何從上面的字元串中擷取“User” ?

echo ${variable%:*:*:*}

echo ${variable%%:*}

awk -F: '$3<100' /etc/passwd

IFS=":"

OFS=":"

${#variable}

${variable:-10}和${variable: -10} 有什麼差別?

${variable:-10} - 如果之前沒有給 variable 指派則輸出 10;如果有指派則輸出該變量

${variable: -10} - 輸出 variable 的最後 10 個字元

如何隻用echo 指令替換字元串的一部分 ?

echo ${variable//pattern/replacement}

tr '{:lower:}' '{:upper:}'

cat /etc/passwd|wc -l

 不用 wc 指令如何計算字元串中的單詞數目 ?

set ${string}

echo $#

"export $variable"或"export variable" 哪個正确 ?

export variable

ls ?[ab]*

echo $string|tr -d ""

for((i=0;i<=100;i=i+3));doecho"Welcome $i times";done

for ((i=0;i<=100;i=i+3))

echo $i

如何列印傳遞給腳本的所有參數 ?

echo $*

[ $a == $b ]和[ $a -eq $b ] 有什麼差別

[ $a == $b ] - 用于字元串比較

[ $a -eq $b ] - 用于數字比較

[ $a -gt 12]

$a -lt 12

$a -le 12

[[ == abc*]]

egrep"^ab|^xy"/etc/passwd|cut-d:-f1

cut -d: -f1

$*和$@ 有什麼差別*

$* - 以一個字元串形式輸出所有傳遞到腳本的參數

$@ - 以 $IFS 為分隔符列出所有傳遞到腳本中的參數

array=("" "" "")

echo $(array[0])

echo $(array[@])

unset array[2]

array[333]="New_element"

read -p "xxx" aa

/usr/bin/expect<

EOD

cat a.txt|awk '{ print $1}'|sort|uniq >aip.txt

cat a.txt|awk '{ print $1}'|sort|uniq >bip.txt

wc -l aip.txt

cat aip.txt bip.txt>cip.txt

cat cip.txt|sort|uniq

diff ipA.txt ipB.txt | grep \>

cata.txt b.txt | awk'{print $2}'> name.txt

sed -i '23s/test/tests/g' xx.txt

awk -F " " 'NR=25{print $3}' /xxx

   head–n25 /web.log | tail –n1 | cut –d “ ” –f3

sed -i "1,3d" /xxx

#!/bin/bash

   i=1

   while[ $i -le 100 ];do

       ret=1

       for(( j=2;j<$i;j++ ));do

   if [ $(($i%$j))-eq 0  ];then

ret=0

break

   fi

       done

       if[ $ret -eq 1 ];then

           echo-n "$i "

       fi

       i=$((i+1 ))

   done

echo 0 23,1,3,5,7 * * * date>>/etc/crontab

find . -size +10k -exec mv /tmp {} \;

find . -size +10k -print0|xargs -0 mv  {} /tmp;

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.2.1:8080

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 8080

echo "2 6-12/2 * * * root /usr/bin/httpd.sh">>/etc/crontab

ps aux|grep|cut -f?

awk -F "," 'if($2>56789){print $0}' file.txt

sed -n "1p;3p;5p;" file.txt

awk 'NR==1|NR==2|NR==3{print $0}' file.txt

sed -i "s#\t#\|#g" xxx.txt

find . -name  "*.sh" -exec mv {}

useradd stu

iptables -A input -p tcp --dport 22 -s 10xxxx -j ACCEPT

iptables -A input -t udp --dport 22 -s xx   -j ACCEPT

iptables -A input -j DROP

grep -n ^$ file1

grep abc$ file1

head -n 3 file1

sed -n "1,3p" file1

vim 

:%d

:%s/shutdown/reboot/g

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to xxxx

find / -size +50k -size -100k

b=${a/123/321};将${a}裡的第一個123替換為321

b=${a//123/321};将${a}裡的所有123替換為321

${a//sss/ggg}

${a/sss/ggg}

Q:4 如何将标準輸出和錯誤輸出同時重定向到同一位置?

答:這裡有兩個方法來實作:

方法一:

2>&1 (# ls /usr/share/doc > out.txt 2>&1 )

方法二:

&> (# ls /usr/share/doc &> out.txt )

10 告訴我shell腳本中Case語句的文法 ?

答:基礎文法如下:

shell 常用

如何調試shell腳本 ?

答:使用’-x’參數(sh -x myscript.sh)可以調試shell腳本。另一個種方法是使用‘-nv’參數( sh -nv myscript.sh)。

rename "oldboy" "oldgirl" *.html|rename "html" "HTML" *.html

cd /oldboy

for i in `ls *.HTML`

mv $i `echo $i|sed -e 's#oldboy#oldgirl#g;s#html#HTML#g'`

echo $a|cut -c1-8

$ MYVAR=foodforthought.jpg

$ echo ${MYVAR##*fo}

rthought.jpg

$ echo ${MYVAR#*fo}

odforthought.jpg

echo ${string:4}//2342341  從第4位開始截取後面所有字元串    

echo ${string:3:3}//123      從第3位開始截取後面3位    

echo ${string:3:6}//123423   從第3位開始截取後面6位    

echo ${string: -4}//2341  :右邊有空格   截取後4位   

echo ${string#a*3}//42341  從$string左邊開始,去掉最短比對子串    

echo ${string#c*3}//abc12342341  這樣什麼也沒有比對到    

echo ${string#*c1*3}//42341  從$string左邊開始,去掉最短比對子串    

echo ${string##a*3}//41     從$string左邊開始,去掉最長比對子串    

echo ${string%3*1}//abc12342  從$string右邊開始,去掉最短比對子串    

echo ${string%%3*1}//abc12     從$string右邊開始,去掉最長比對子串  

mount –t cifs –ousername=“”,passwd=“”//192.168.1.1/共享檔案夾/ /mnt/

[root@new-web7 ~17:39:55]#netstat -na | awk'/^tcp/ {++S[$NF]} END {for(i in S) print i, S[i]}'TIME_WAIT 3460FIN_WAIT1 17FIN_WAIT2 6ESTABLISHED 430LAST_ACK 24LISTEN 18

檢視IP連接配接數(通路本機的遠端主機數量):

netstat -n | awk '/^tcp/ {print $5}'| awk -F: '{print $1}' |sort | uniq -c | sort –rn

1)netstat –n:列出本機的所有網絡連接配接,包括TCP/UDP和Unix socket兩部分。

2)awk '/^tcp/ {print $5}':/^tcp/:條件是以tcp開頭的行,^:在此處代表行首的意思。{print $5:将第5個字段列印出來,代表遠端主機的IP和port,預設是以tab作為分隔域。

3)awk -F: '{print $1}':“-F:”:以:作為分隔域;列印第一個字段,将port去掉,隻顯示IP。

4)sort:将IP進行排序。

5)uniq –c:将相同行合并,并統計相同行的數量。

6)sort –nr:以相同行數量進行排序,反向排序,最大的放在最前面。

cat /proc/sys/kernel/random/uuid| md5sum| cut –c 1 -32

cat /proc/sys/kernel/random/uuid|md5sum|cut -c 1-32

cat xx|awk '{print $1}'|uniq -c|sort -rn|head -n 5

e2fsck -p xxx