Shell经典实例
Shell
?,µäʵÀý.txt21?ºÅ????á?ª??Èç?ûÄãÔø?,Àú?ý??Ìì??ÄÇÃ?Äã?Í?áÓÐ?ºÉ???Èç
?ûÄãÓÐ×ÅÐÅÄî??ÄÇÃ??ºÌìÒ????áÒ?Ô???Èç?ûÄãÕýÔÚ???ö??ÄÇÃ?×ÜÓÐÒ?ÌìÄã?á
ÓµÓÐ???ªÂúÔ???Thizlinux ϵÍ??Ì?Ì Shell ?,µäʵÀý
----------------Milo
?,µäÐ?shell
1 ÁÐÄ?Â?Ê?µÄshell
?Å??ÈçÏÂ?º
????#!/bin/sh
????# dtree: Usage: dtree [any directory]
????dir=${1:-.}
????(cd $dir; pwd)
find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e
"s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g"
2 whileÖÐÊ?ÓÃread (fileÊÇÒ??öÎÄ?þ)
cat file | while read line
do
echo $line
echo " :: Please input any key(s):c"
str4read=""
while true
do
chr4read=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
str4read=$str4read$chr4read
if [ "$chr4read" = "" ] ;then break; fi
done
echo " :: |$str4read|"
done
3 ???à?ö?Õ?ñÌæ??Ϊ×Ö?û
sed 's/[ ][ ]*/ /g'
Èç?û?Õ?ñÓëtab???æÊ?ÓÃ
sed -e 's/[[:space:]][[:space:]]*/ /g' filename
4ÓÃ?Å??ʵÏÖ?Ö?îÎÄ?þ
#!/bin/bash
if [ $# -ne 2 ]; then
echo 'Usage: split file size(in bytes)'
exit
fi
file=$1
size=$2
if [ ! -f $file ]; then
echo "$file doesn't exist"
exit
fi
#TODO: test if $size is a valid integer
filesize=`/bin/ls -l $file | awk '{print $5}'`
echo filesize: $filesize
let pieces=$filesize/$size
let remain=$filesize-$pieces*$size
if [ $remain -gt 0 ]; then
let pieces=$pieces+1
fi
echo pieces: $pieces
i=0
while [ $i -lt $pieces ];
do
echo split: $file.$i:
dd if=$file of=$file.$i bs=$size count=1 skip=$i
let i=$i+1
done
echo "#!/bin/bash" > merge
echo "i=0" >> merge
echo "while [ $i -lt $pieces ];" >> merge
echo "do" >> merge
echo " echo merge: $file.$i" >> merge
echo " if [ ! -f $file.$i ]; then" >> merge
echo " echo merge: $file.$i missed" >> merge
echo " rm -f $file.merged" >> merge
echo " exit" >> merge
echo " fi" >> merge
echo " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >>
merge
echo " let i=$i+1" >> merge
echo "done" >> merge
chmod u+x merge'
5µÃµ?ÉÏÔÂÎ?ÈÕÆÚ???ñÊ?ΪYYYYMMDD
get_lastday_of_lastmonth()
{
yy=`date +%Y`
mm=`date +%m-1|bc`
[ $mm -lt 1 ] && mm=12;yy=`expr $yy - 1`
aaa=`cal $mm $yy`
dd=`echo $aaa|awk '{print $NF}'`
echo $yy$mm$dd
}
print
$NFµÄ$NFÊÇ?òÓ?×îºóÒ??öÁÐ??ÒòΪawkµÄÄÚÖÃ?äÁ?NFÊÇÁеÄ×ÜÊý???ø$NF?Í?ú
?í×Å×îºóÒ?ÁÐ
6 ʵÏÖÓÃbackup?òtarÃüÁîÀ?×öÄ?Â????Ý
ÐèÒª???ÖÁ??öÄ?Â?µ?ÖеÄÎÄ?þÒÔ??Êô×é?Øϵ???ä??×ÓÄ?Â??á?????ä??Í??ý?Ü
µÀ?ØÖÆtarºÍbackupÃüÁî????ÐèÒªÖÐ?äµÄarchive??????Âǵ?ËÙ?ÈÒÔ???Õ?äµÄ
?Øϵ??
(cd /source && tar cf - .) |(cd /dest && tar zxfp -)
Å?Ã?ÓÐ backup ÃüÁî??µ?ÊÇ tar ÓÃ?ܵÀ?ÉÒÔ??
tar -cf - dir1 | ( cd dir2; tar -xvf - )
?áÒÆ?ó??
more aaa.sh
#?ÆËãÁ??öÈÕÆÚ?äÓÐ?àÉÙÌì
#date1,date2:yyyymmdd
#Usage:command date1 date2
str=$1
yy1=`echo $str|cut -c 1-4`
mm1=`echo $str|cut -c 5-6`
dd1=`echo $str|cut -c 7-8`
str=$2
yy2=`echo $str|cut -c 1-4`
mm2=`echo $str|cut -c 5-6`
dd2=`echo $str|cut -c 7-8`
count_day=`expr $dd2 - $dd1`
while [ $yy2 -ne $yy1 -o $mm2 -ne $mm1 ]
do
mm2=`expr $mm2 - 1`
[ $mm2 -eq 0 ] && mm2=12 && yy2=`expr $yy2 - 1`
aaa=`cal $mm2 $yy2`
bbb=`echo $aaa|awk '{print $NF}'`
count_day=`expr $count_day + $bbb`
done
echo $count_day
7 ?àÐ?Ò??öÖ?ÔÊÐíÓÃ??Ö?ÐÐtelnetµÄshell
ΪÁË?àÊÓÓÃ??ÍøÂç?Ù×?ÐÐΪ??Ö???unxiÖ??ú?øÉè???ÜÀíÔ?µÇÂ???È?ºóÓÃshel
l?ØÖÆËû??Ö??ÉÒÔÊ?ÓÃtelnetÃüÁî??ÆäËûÒ??Å??Ðí???üÀ?cd??lsµÈ???ÍÊÇÒ??
öÓÃÀ?Ô??̵ÇÂ?µÄ?ÜÀíÆ?Ì???ÎÒ?Ôshell??Êì??ÇëÖ?µ???
.profileÖÐ?ÓÈë?º
read addr
telnet $addr
exit
8 ÅÐ?ÏÎÄ?þµÄ?ÃÎÊÈ?ÏÞÊÇ??ÊÇ600
ls -l filename | awk '{ if($1 ~ "-rw-------") ..... }'
ls -l filename | grep "^-rw------" -c
#!/usr/bin/bash
#showmod
[ $# -eq 0 ] && { echo "Usage: $0 filelist ... "; exit ;}
show()
{
{ [ -d $1 ] && ls -ld $1 ; [ -f $1 ] && ls -la $1 ;} | awk '{
umask=0
umask_=""
for(i=1;i %s ",$9,$1,umask_);
}';
}
for file_dir in $*
do
show $file_dir
done
9 ËãÇàÍܵÄ?Å??
maxcount=$1;
count=1;
if [ $# -eq 1 ]
then
while [ $count -le $maxcount ]
do echo $count Ö?ÇàÍÜ $count ÕÅ×ì, `expr $count * 2`Ö?ÑÛ??,`expr $count
* 4`ÌõÍÈ;
count=`expr $count + 1`;
done;
else
echo "usage: sendos count"
fi
10 ÔÚSHELL?ÌÐòÖÐʵÏÖ????ÈÎÒâ?ü?ÌÐø??
ÔÚÐ?Ò??öSHELL?ÌÐò???ÉÊÇÓöµ?ÁËÒ??öÄÑÌâ??ÔÚREAD?ÓÊÜÊäÈëÊ????ØÐë???Ø?
µ?ü?ÅÄÜÈ?ÈÏ???øÎÒÐèÒªÖ?Òª??Ò??ö?ü?ÍÄܵõ?ÓÃ??µÄÊäÈë??ÎÞÐë???Ø?µ?ü?
?ÓÐÊ?Ã?ºÃ?ì??ÄØ
#!/bin/sh
get_char()
{
SAVEDSTTY=`stty -g`
stty -echo
stty raw
dd if=/dev/tty bs=1 count=1 2> /dev/null
stty -raw
stty echo
stty $SAVEDSTTY
}
echo "Press any key to continue..."
char=`get_char`
Èç?ûÄãµÄ?úÆ?ÉÏ??ÈÏstty rawÄÇÃ??Ѻ?ÊýÖÐÁ????öÏÖµÄraw???Écbreak??
11 ÔÚlinux????ÏÂÆô??Ê??ò?ªnumlock
??ÏëÔÚϵÍ?Æô??Ê?×Ô???ò?ªNumLock???ÉÒÔÔÚ/etc/rc.d/rc.localÖÐ?ÓÈëÒÔÏÂÄÚÈÝ?º
????for t in 1 2 3 4 5 6 7 8
????do
???? setleds +num
???? $t>/dev/null
????done
12 ÔÚshellÀïÈçºÎÏÞÖÆÊäÈëµÄ???È
?Ù?öÀý×Ó???ÈÈçÓÃ??ÊäÈëÓÃ??ÃûÊ?Ö?ÄÜ?øËûÊäÈë8?ö×Ö?û??Èç?û???ýÁË8?ö×Ö?û?â?ê?ÍÍ?Ö?ÔÚµÚ?Ë?ö×Ö?ûÄÇ?ù?????ÌÐø??Ò?Ö?µÈ?ý?Ø?µÖ?ÅÂÒª×Ô?ºÀ?ÁíÐ?Ò??öSHELLÁË??
ÎÒÏÖÔÚ?ÉÒÔʵÏÖµ?Èç?ûÊäÈë???öµÄ???â?ê?ÍÍ?ÔÚ×îºóÒ??ö×Ö?û??µ?ÊÇ?ÔÓÚÄÇÐ?ÊäÈëÐ?ÓÚ?æ??Î?ÊýµÄÄÇÐ??ÍÃ?ÕÛÁË???Ù?öÀý×Ó???ÈÈçÓÃ??Óò×î????ÄÜ???ý8Î???ÎÒÊäÈëÁË6Î?È?ºó?Ø?µ???Í???á?áÊø??Ò???ÒªÊäÈëÍê8Î????Ø?µ?Å?ÉÒÔ?áÊø
ÎÄ?þÃû: input.sh ÓÃ???ºinput.sh ÏÞÖƵÄ???È
Àý?ºinput.sh 8 ??ÏÞÖÆÊäÈë8Î???
#??/bin/ksh
# Program Name : input.sh
trap '' 1 2 3 5 7 9 15 13
getcon(){
stty raw -echo
conchar=`dd if=/dev/tty bs=1 count=1 2>/dev/null`
stty sane
echo "$conchar"
}
while
i=0;clear >/dev/tty
echo "
13 Ë??ú(?à?ú)×Ô???????Ý????
ÎÊ Ìâ?º
??????Ë?ÓÐÁ?Ì?LINUX?þÎñÆ???Ã??ö?þÎñÆ?Ö?ÓÐÒ??öÓ?ÅÌ??ËùÒÔ???ݵÄÎÊÌâ?ÍÏÔµÃÌØ?ðÖØÒª??ÎÒÃÇ×?ÓÐMySQLÊý?Ý?â??µ?È?Í?Ê?Ò?Òª?â?öMySQL???ݵÄÎÊÌâ??
Ä? µÄ?º
????host ?úÆ?×îÖÕËùÓÐ???Ý??ÔÚÆäÉÏÁô???Ý??ship?úÆ????æhost?úÆ????Ý
?? ???º
????Í??ýshell?Å?????ò?üÏà?ØÒª???ݵÄÎÄ?þ??È?ºóÍ??ýftp?Ù×?ÏÂÔØ??ÉÏÔØÍê?É?â?ö??????
????Á?Ì??úÆ?root Í??ýcrontab ÈÃ?Å??ÔÚ??×Ô?úÆ???Ê?Ö?ÐÐ??
??????Òéhost Ã?ÌìÔçÉÏ3µãÖ?ÐÐ??
??????Òéship Ã?ÌìÔçÉÏ6µãÖ?ÐÐ??
×?Òâµã?º
????Á?Ì??þÎñÆ?ϵÍ?Ê??ä×îºÃÏà?î??Òª???ý1Ð?Ê???
?????Ë?Å??ÊÇÃ?ÖÜÀñ?Ý6Ö?ÐÐ???ݵÄ??µ?È?ÄãÒ??ÉÒÔÐÞ?Ä?ÉÃ?ÔÂ?òÃ?Ìì???Ý??
????µ?È?Ò??ÉÒÔÐÞ?Ä?ÉÒ??öÔöÁ????Ý?Å????
?ßÌå?Å???º
ÒÔÏÂΪhost?úÆ??Å??
#//////////////host?úÆ??Å??///////////////
#! /bin/sh
HOST="abc.com"
USER="backup_use" #ship?úÆ?backup_useÓÃ??
PASSWORD="backup_use" #ship?úÆ??ÔÓ?ÓÃ??ÃÜÂë
BACKUPDIR="/home/backup_use/ship" #host?úÆ?backup_useÓÃ??Ä?Â?
BACKUPDIR2="/home/backup_use/host" #host?úÆ?backup_useÓÃ??Ä?Â?
MYSQLPASS="abc" #ship ?úÆ?MySQL root ÓÃ??ÃÜÂë
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/nusphere/MySQL/bin
DOW=`date +%a`
DM=`date +%Y%b%d`
FILE1=ship-virtual-$DM.tar.gz
FILE2=ship-MySQLdata-$DM.tar.gz
FILE3=ship-szeasy-$DM.tar.gz
FILE4=ship-other-$DM.tar.gz
#
FIL1=$BACKUPDIR2/host-main-$DM.tar.gz
FIL2=$BACKUPDIR2/host-MySQLdata-$DM.tar.gz
FIL3=$BACKUPDIR2/host-other-$DM.tar.gz
#
DIRECTORIE1="/www /home/jjd" # Òª???ݵÄÄ?Â?1
DIRECTORIE2="/etc /var/named /usr/local/nusphere/apache/conf" # Òª???ݵÄÄ?Â?2
#
if [ $DOW = "Sat" ]; then # Ã??öÀñ?ÝÁùÍêÈ????Ý
tar -zcpf $FIL1 $DIRECTORIE1
tar -zcpf $FIL3 $DIRECTORIE2
MySQLdump --all-databases -q -uroot -p$MYSQLPASS |gzip > $FIL2
ftp -i -n < $BACKUPDIR/$COMPUTER-MySQLdata-$DM.tar.gz
fi
14 ÎÄ?þÐòÁÐa1,a2,a3...a11,a12...a1000?Ä?Éa0001,a0002...a1000?
$cat test
ls a* > tempfile1
sed 's/a//' tempfile1 > tempfile2
awk '{printf("mv a%s a%04s ", $0, $0)}' tempfile2 > tempfile3
chmod 700 tempfile3
./tempfile3
rm tempfile*
$chmod test
----------------------------------------------------------------
ls a*|awk '{
num=substr($1,2,length($1)-1);
printf "mv %s a%04d ",$1,num
}'>rename.sh
sh rename.sh
----------------------------------------------------------------
for file in a*
do
newfile=`echo $file | awk '{printf "a%04d", substr($1, 2,
length($1)-1)}'`
mv $file $newfile
done
?ø?ö??ÓÃawkµÄ??Ð?ÂÊ?áµÍÒ?µã
ls -1 a*|while read j
do
num=`echo $j|cut -b 2-`
num=`printf a%04s $num`
mv $j $num
done
-----------------------------------------------------------------
ÉÔÎ?Ëõ?õÒ?ÏÂ?º
for file in a*
do
mv $file `echo $file|awk '{printf "a%04d", substr($1,2,length($1)-1)}'`
done
Èç?ûa1,a2,a3...µÈÎÄ?þÊÇ??×ÔÓÐ??Í?µÄÀ?Õ?ÃûÄØ???ÍÏña1.pxx,a2,baa,a3.
tga...
ÕâÑùÊÇ??ÊÇ?ÉÒÔÄØ?º
for file in a*
do
nam=`echo $file|cut -d. -f1`
exe=`echo $file|cut -d. -f2`
mv $file `echo $nam|awk '{printf "a%04d", substr($1,2,length($1)-1)}'`.$exe
done
15 ?ûÖ??ÓÒ??öIPµÇÂ?µÄshell
?â?ö????0?º
ÓÃshellÍêÈ??ÉÒÔ?â?ö??Èç?ûÓÐtcpwrapperµÄϵÍ?,?ÉÒÔÖ??Ó?Ó/etc/hosts.deny
?â?ö????1?º
ÔÚ/etc/profileÀï?ÓÒ??Îshell?Í?ÉÒÔÁË(sco openserver)
ÕâÊÇÎÒÐ?µÄÖ?ÒªÇó??C?εÇÂ?µÄshell,?Ä?Ä?Í?ÉÒÔÁË.
who=`who am i|awk '{print $1}'`
myterm=`who am i|awk '{print substr($2,4,2)}'`
if [ "x"$who = "xroot" ]
then
subnet=`finger|grep $myterm|awk '{print substr($8,1,8)}'`
else
subnet=`finger|grep $myterm|awk '{print substr($7,1,8)}'`
fi
test x$subnet != x && test x$who != xroot && test "x"$subnet != "x46.8.44." &&
echo " Please login from local network " && exit
16 evalÓÃ??ÈýÀý
## shell:/bin/sh ##
#ÀýÒ?:
#Ñ?ÕÒ?ûºÏÌõ?þµÄ?äÁ?Ãû,È?ºó???Ã?äÁ?µÄÖµ??ÓèÁíÒ??äÁ?
v1=aaa
v2=bbb
c=1
if [ $c -eq 1 ]
then
vname=v$c #ÕÒµ??ûºÏÌõ?þµÄ?äÁ?ÃûΪv1
eval vvv="$"$vname ; echo vvv: $vvv #???äÁ?v1µÄÖµ??Óèvvv,??,Ê?vvv=aaa
eval vvv='$'$vname ; echo vvv: $vvv #???äÁ?v1µÄÖµ??Óèvvv,??,Ê?vvv=aaa
#eval vvv=$$vname ; echo vvv: $vvv #?íÎóÓÃ??
fi
#Àý?þ:#ÒÔ?äÁ?v1µÄÖµaaa×?Ϊ?äÁ?Ãû,???äÁ?vaaaµÄÖµ??ÓèÕâÒ?ÐÂ??ÒåµÄ?äÁ?aaa
v1=aaa ; vaaa="This is aaa"
#eval $v1=$vaaa ; echo aaa: $aaa #?íÎóÓÃ??
#eval $v1="$vaaa" ; echo aaa: $aaa #?íÎóÓÃ??
eval $v1='$vaaa' ; echo aaa: $aaa
#ÀýÈý:
#ÒÔ?äÁ?v1µÄÖµaaa×?Ϊ?äÁ?Ãû,?????äÁ?Ãû×Ö??×?Ϊֵ??Óè×ÔÉí
v1=aaa ; vaaa="This is aaa"
eval $v1=$v1 ; echo aaa: $aaa #ÓëÀý?þµÄ?íÎóÓÃ????Í?,ÕâÒ?ÓÃ??ÊÇÕýÈ?µÄ
eval $v1="$v1" ; echo aaa: $aaa #ÓëÀý?þµÄ?íÎóÓÃ????Í?,ÕâÒ?ÓÃ??ÊÇÕýÈ?µÄ
#Çø?ðÔÚÓÚ??Àý?þÖеÄvaaaµÄÖµÖÐ?äÓÐ?Õ?ñ
eval $v1='$v1' ; echo aaa: $aaa
17 ?Ä?äUNIXÖÕ?ËÑÕÉ?
a. ÓÃecho "[31m?âÊÔ[37m"
echo "^[[Xm YourChar"
(X=30,31...36?)
Çë×?ÒâÕâ?öתÒåϵÁеÄÇÃ??ÊÇ??[30m
echo "[;;m"
×?Òâ??Óï?ä?ØÐëÒªÔÚ""Ö??ä??ÊôÐÔ?Ö?ô?ûΪ";"??ÈçÉÁË?ºìÉ?
echo "[31;5m?âÊÔ"
b. Ç??? ???? ÑÕÉ?
---------------------------------------
30 40 ºÚÉ?
31 41 ?tÉ?
32 42 ?GÉ?
33 43 üSÉ?
34 44 Ë{É?
35 45 ×Ï?tÉ?
36 46 ÇàË{É?
37 47 ?×É?
?úÂë ÒâÒå
-------------------------
0 OFF
1 ?ßÁÁÏÔÊ?
4 underline
5 ÉÁË?
7 ???×ÏÔÊ?
8 ???É?û
c. ?úÉúÑÕÉ?(ºÚÉ??????ÓÂÌÉ?Ç???É?)?º
sco: setcolor red; echo "abcd"; setcolor white
linux/BSD: /usr/bin/echo -e "
18 ?Ö??È?Ê?bashÌáÊ??û
export PS1="[u@h W]$ "
??ÏÕÆð?û??ÔÚ~/.bashrcºÍ~/.bash_profile
19 grep/awk/sedµÄ?àÌõ?þ?éÑ?
# cat gt
one two three
four five six
one two
one seven three
# grep one three gt
grep: three: No such file or directory
gt:one two three
gt:one two
gt:one seven three
?ØÈ?Í?Ê??öÏÖoneºÍthreeµÄÐÐ???á?ûÓ??ÃÊÇ?º
one two three
one seven three
a. ÓÃgrep
cat gt | grep one | grep three
b. ÓÃawk
awk '/one/&&/three/' gt
c. ÓÃsed
sed -ne '/one/{/three/p}' gt
Íê?Ï
本文档为【Shell经典实例】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。