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))

do

echo $i

done

如何打印传递给脚本的所有参数 ?

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脚本 ?

答:使用’-x’参数(sh -x myscript.sh)可以调试shell脚本。另一个种方法是使用‘-nv’参数( sh -nv myscript.sh)。

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

#!/bin/bash

cd /oldboy

for i in `ls *.HTML`

do

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

done


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

你可能感兴趣的:(shell 常用)