./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语句的语法 ?
答:基础语法如下:
![img_58f168d64e237652413f5a383fb83576.png](https://i-blog.csdnimg.cn/blog_migrate/9c7fc0ac1af90416526089d61e89bc80.png)
如何调试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