ºìÁªLinuxÃÅ»§
Linux°ïÖú

Linux½Å±¾±àд»ù´¡

·¢²¼Ê±¼ä:2007-06-08 00:39:26À´Ô´:ºìÁª×÷Õß:wsecuroty
1. Linux ½Å±¾±àд»ù´¡
1.1 Óï·¨»ù±¾½éÉÜ
1.1.1 ¿ªÍ·
³ÌÐò±ØÐëÒÔÏÂÃæµÄÐпªÊ¼£¨±ØÐë·½ÔÚÎļþµÄµÚÒ»ÐУ©£º
#!/bin/sh
¡¡¡¡·ûºÅ#!ÓÃÀ´¸æËßϵͳËüºóÃæµÄ²ÎÊýÊÇÓÃÀ´Ö´ÐиÃÎļþµÄ³ÌÐò¡£ÔÚÕâ¸öÀý×ÓÖÐÎÒÃÇʹÓÃ/bin/shÀ´Ö´ÐгÌÐò¡£
¡¡¡¡µ±±à¼­ºÃ½Å±¾Ê±£¬Èç¹ûÒªÖ´Ðиýű¾£¬»¹±ØÐëʹÆä¿ÉÖ´ÐС£
¡¡¡¡ÒªÊ¹½Å±¾¿ÉÖ´ÐУº
±àÒë chmod +x filename ÕâÑù²ÅÄÜÓÃ./filename À´ÔËÐÐ
1.1.2 ×¢ÊÍ
¡¡¡¡ÔÚ½øÐÐshell±à³Ìʱ£¬ÒÔ#¿ªÍ·µÄ¾ä×Ó±íʾעÊÍ£¬Ö±µ½ÕâÒ»ÐеĽáÊø¡£ÎÒÃÇÕæ³ÏµØ½¨ÒéÄúÔÚ³ÌÐòÖÐʹÓÃ×¢ÊÍ¡£
Èç¹ûÄúʹÓÃÁË×¢ÊÍ£¬ÄÇô¼´Ê¹Ï൱³¤µÄʱ¼äÄÚûÓÐʹÓøýű¾£¬ÄúÒ²ÄÜÔں̵ܶÄʱ¼äÄÚÃ÷°×¸Ã½Å±¾µÄ×÷ÓÃ
¼°¹¤×÷Ô­Àí¡£
1.1.3 ±äÁ¿
¡¡¡¡ÔÚÆäËû±à³ÌÓïÑÔÖÐÄú±ØÐëʹÓñäÁ¿¡£ÔÚshell±à³ÌÖУ¬ËùÓеıäÁ¿¶¼ÓÉ×Ö·û´®×é³É£¬²¢ÇÒÄú²»ÐèÒª¶Ô±äÁ¿
½øÐÐÉùÃ÷¡£Òª¸³Öµ¸øÒ»¸ö±äÁ¿£¬Äú¿ÉÒÔÕâÑùд£º
#!/bin/sh
#¶Ô±äÁ¿¸³Öµ£º
a="hello world"
# ÏÖÔÚ´òÓ¡±äÁ¿aµÄÄÚÈÝ£º
echo "A is:"
echo $a
ÓÐʱºò±äÁ¿ÃûºÜÈÝÒ×ÓëÆäËûÎÄ×Ö»ìÏý£¬±ÈÈ磺
num=2
echo "this is the $numnd"
Õâ²¢²»»á´òÓ¡³ö"this is the 2nd"£¬¶ø½ö½ö´òÓ¡"this is the "£¬ÒòΪshell»áÈ¥ËÑË÷±äÁ¿numndµÄÖµ£¬
µ«ÊÇÕâ¸ö±äÁ¿Ê±Ã»ÓÐÖµµÄ¡£¿ÉÒÔʹÓû¨À¨ºÅÀ´¸æËßshellÎÒÃÇÒª´òÓ¡µÄÊÇnum±äÁ¿£º
num=2
echo "this is the ${num}nd"
¡¡¡¡Õ⽫´òÓ¡£º this is the 2nd
1.1.4 »·¾³±äÁ¿
ÓÉexport¹Ø¼ü×Ö´¦Àí¹ýµÄ±äÁ¿½Ð×ö»·¾³±äÁ¿¡£ÎÒÃDz»¶Ô»·¾³±äÁ¿½øÐÐÌÖÂÛ£¬ÒòΪͨ³£Çé¿öϽö½öÔڵǼ
½Å±¾ÖÐʹÓû·¾³±äÁ¿¡£
1.1.5 ShellÃüÁîºÍÁ÷³Ì¿ØÖÆ
ÔÚshell½Å±¾ÖпÉÒÔʹÓÃÈýÀàÃüÁ
1)Unix ÃüÁî:
¡¡¡¡ËäÈ»ÔÚshell½Å±¾ÖпÉÒÔʹÓÃÈÎÒâµÄunixÃüÁµ«ÊÇ»¹ÊÇÓÉһЩÏà¶Ô¸ü³£ÓõÄÃüÁî¡£ÕâЩÃüÁîͨ³£ÊÇÓÃÀ´
½øÐÐÎļþºÍÎÄ×Ö²Ù×÷µÄ¡£
³£ÓÃÃüÁîÓï·¨¼°¹¦ÄÜ
¡¡¡¡echo "some text": ½«ÎÄ×ÖÄÚÈÝ´òÓ¡ÔÚÆÁÄ»ÉÏ
¡¡¡¡ls: ÎļþÁбí
¡¡¡¡wc -l filewc -w filewc -c file: ¼ÆËãÎļþÐÐÊý¼ÆËãÎļþÖеĵ¥´ÊÊý¼ÆËãÎļþÖеÄ×Ö·ûÊý
¡¡¡¡cp sourcefile destfile: Îļþ¿½±´
¡¡¡¡mv oldname newname : ÖØÃüÃûÎļþ»òÒƶ¯Îļþ
¡¡¡¡rm file: ɾ³ýÎļþ
¡¡¡¡grep 'pattern' file: ÔÚÎļþÄÚËÑË÷×Ö·û´®±ÈÈ磺grep 'searchstring' file.txt
¡¡¡¡cut -b colnum file: Ö¸¶¨ÓûÏÔʾµÄÎļþÄÚÈÝ·¶Î§£¬²¢½«ËüÃÇÊä³öµ½±ê×¼Êä³öÉ豸±ÈÈ磺Êä³ö
ÿÐеÚ5¸öµ½µÚ9¸ö×Ö·ûcut -b5-9 file.txtǧÍò²»ÒªºÍcatÃüÁî»ìÏý£¬
ÕâÊÇÁ½¸öÍêÈ«²»Í¬µÄÃüÁî
¡¡¡¡cat file.txt: Êä³öÎļþÄÚÈݵ½±ê×¼Êä³öÉ豸£¨ÆÁÄ»£©ÉÏ
¡¡¡¡file somefile: µÃµ½ÎļþÀàÐÍ
¡¡¡¡read var: ÌáʾÓû§ÊäÈ룬²¢½«ÊäÈ븳ֵ¸ø±äÁ¿
¡¡¡¡sort file.txt: ¶Ôfile.txtÎļþÖеÄÐнøÐÐÅÅÐò
¡¡¡¡uniq: ɾ³ýÎı¾ÎļþÖгöÏÖµÄÐÐÁбÈÈ磺 sort file.txt | uniq
¡¡¡¡expr: ½øÐÐÊýѧÔËËãExample: add 2 and 3expr 2 "+" 3
¡¡¡¡find: ËÑË÷Îļþ±ÈÈ磺¸ù¾ÝÎļþÃûËÑË÷find . -name filename -print
¡¡¡¡tee: ½«Êý¾ÝÊä³öµ½±ê×¼Êä³öÉ豸(ÆÁÄ») ºÍÎļþ±ÈÈ磺somecommand | tee outfile
¡¡¡¡basename file: ·µ»Ø²»°üº¬Â·¾¶µÄÎļþÃû±ÈÈ磺 basename /bin/tux½«·µ»Ø tux
¡¡¡¡dirname file: ·µ»ØÎļþËùÔÚ·¾¶±ÈÈ磺dirname /bin/tux½«·µ»Ø /bin
¡¡¡¡head file: ´òÓ¡Îı¾Îļþ¿ªÍ·¼¸ÐÐ
¡¡¡¡tail file : ´òÓ¡Îı¾Îļþĩβ¼¸ÐÐ
¡¡¡¡sed: SedÊÇÒ»¸ö»ù±¾µÄ²éÕÒÌæ»»³ÌÐò¡£¿ÉÒÔ´Ó±ê×¼ÊäÈ루±ÈÈçÃüÁî¹ÜµÀ£©¶ÁÈëÎı¾£¬²¢½«
½á¹ûÊä³öµ½±ê×¼Êä³ö£¨ÆÁÄ»£©¡£¸ÃÃüÁî²ÉÓÃÕýÔò±í´ïʽ£¨¼û²Î¿¼£©½øÐÐËÑË÷¡£
²»ÒªºÍshellÖеÄͨÅä·ûÏà»ìÏý¡£±ÈÈ磺½«linuxfocus Ì滻Ϊ
LinuxFocus £ºcat text.file | sed 's/linuxfocus/LinuxFocus/' > newtext.file
¡¡¡¡awk: awk ÓÃÀ´´ÓÎı¾ÎļþÖÐÌáÈ¡×ֶΡ£È±Ê¡µØ£¬×ֶηָî·ûÊÇ¿Õ¸ñ£¬¿ÉÒÔʹÓÃ-FÖ¸¶¨ÆäËû·Ö¸î·û¡£
cat file.txt | awk -F, '{print $1 "," $3 }'ÕâÀïÎÒÃÇʹÓã¬×÷Ϊ×ֶηָî·û£¬Í¬Ê±´òÓ¡
µÚÒ»¸öºÍµÚÈý¸ö×ֶΡ£Èç¹û¸ÃÎļþÄÚÈÝÈçÏ£º Adam Bor, 34, IndiaKerry Miller, 22, USA
ÃüÁîÊä³ö½á¹ûΪ£ºAdam Bor, IndiaKerry Miller, USA
2) ¸ÅÄî: ¹ÜµÀ, Öض¨ÏòºÍ backtick
¡¡¡¡ÕâЩ²»ÊÇϵͳÃüÁµ«ÊÇËûÃÇÕæµÄºÜÖØÒª¡£
¡¡¡¡¹ÜµÀ (|) ½«Ò»¸öÃüÁîµÄÊä³ö×÷ΪÁíÍâÒ»¸öÃüÁîµÄÊäÈë¡£
grep "hello" file.txt | wc -l
¡¡¡¡ÔÚfile.txtÖÐËÑË÷°üº¬ÓС±hello¡±µÄÐв¢¼ÆËãÆäÐÐÊý¡£
¡¡¡¡ÔÚÕâÀïgrepÃüÁîµÄÊä³ö×÷ΪwcÃüÁîµÄÊäÈë¡£µ±È»Äú¿ÉÒÔʹÓöà¸öÃüÁî¡£
¡¡¡¡Öض¨Ïò£º½«ÃüÁîµÄ½á¹ûÊä³öµ½Îļþ£¬¶ø²»ÊDZê×¼Êä³ö£¨ÆÁÄ»£©¡£
¡¡¡¡> дÈëÎļþ²¢¸²¸Ç¾ÉÎļþ
¡¡¡¡>> ¼Óµ½ÎļþµÄβ²¿£¬±£Áô¾ÉÎļþÄÚÈÝ¡£
·´¶ÌбÏß
¡¡Ê¹Ó÷´¶ÌбÏß¿ÉÒÔ½«Ò»¸öÃüÁîµÄÊä³ö×÷ΪÁíÍâÒ»¸öÃüÁîµÄÒ»¸öÃüÁîÐвÎÊý¡£
ÃüÁ
find . -mtime -1 -type f -print
¡¡¡¡ÓÃÀ´²éÕÒ¹ýÈ¥24Сʱ£¨-mtime -2Ôò±íʾ¹ýÈ¥48Сʱ£©ÄÚÐ޸ĹýµÄÎļþ¡£Èç¹ûÄú
Ï뽫ËùÓвéÕÒµ½µÄÎļþ´òÒ»¸ö°ü£¬Ôò¿ÉÒÔʹÓÃÒÔϽű¾£º
#!/bin/sh
# The ticks are backticks (`) not normal quotes ('):
tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
3) Á÷³Ì¿ØÖÆ
1.if
¡¡¡¡"if" ±í´ïʽ Èç¹ûÌõ¼þΪÕæÔòÖ´ÐÐthenºóÃæµÄ²¿·Ö£º
if ....; then
¡¡ ....
elif ....; then
¡¡ ....
else
¡¡ ....
fi
´ó¶àÊýÇé¿öÏ£¬¿ÉÒÔʹÓòâÊÔÃüÁîÀ´¶ÔÌõ¼þ½øÐвâÊÔ¡£±ÈÈç¿ÉÒԱȽÏ×Ö·û´®¡¢ÅжÏÎļþ
ÊÇ·ñ´æÔÚ¼°ÊÇ·ñ¿É¶ÁµÈµÈ¡­
¡¡¡¡Í¨³£ÓÃ" [ ] "À´±íʾÌõ¼þ²âÊÔ¡£×¢ÒâÕâÀïµÄ¿Õ¸ñºÜÖØÒª¡£ÒªÈ·±£·½À¨ºÅµÄ¿Õ¸ñ¡£
[ -f "somefile" ] £ºÅжÏÊÇ·ñÊÇÒ»¸öÎļþ
[ -x "/bin/ls" ] £ºÅжÏ/bin/lsÊÇ·ñ´æÔÚ²¢ÓпÉÖ´ÐÐȨÏÞ
[ -n "$var" ] £ºÅжÏ$var±äÁ¿ÊÇ·ñÓÐÖµ
[ "$a" = "$b" ] £ºÅжÏ$aºÍ$bÊÇ·ñÏàµÈ
¡¡¡¡Ö´ÐÐman test¿ÉÒԲ鿴ËùÓвâÊÔ±í´ïʽ¿ÉÒԱȽϺÍÅжϵÄÀàÐÍ¡£
¡¡¡¡Ö±½ÓÖ´ÐÐÒÔϽű¾£º
#!/bin/sh
if [ "$SHELL" = "/bin/bash" ]; then
¡¡echo "your login shell is the bash (bourne again shell)"
else
¡¡echo "your login shell is not bash but $SHELL"
fi
¡¡¡¡±äÁ¿$SHELL°üº¬Á˵ǼshellµÄÃû³Æ£¬ÎÒÃǺÍ/bin/bash½øÐÐÁ˱Ƚϡ£
¿ì½Ý²Ù×÷·û
ÊìϤCÓïÑÔµÄÅóÓÑ¿ÉÄÜ»áºÜϲ»¶ÏÂÃæµÄ±í´ïʽ£º
[ -f "/etc/shadow" ] && echo "This computer uses shadow passwors"
¡¡¡¡ÕâÀï && ¾ÍÊÇÒ»¸ö¿ì½Ý²Ù×÷·û£¬Èç¹û×ó±ßµÄ±í´ïʽΪÕæÔòÖ´ÐÐÓұߵÄÓï¾ä¡£
ÄúÒ²¿ÉÒÔÈÏΪÊÇÂß¼­ÔËËãÖеÄÓë²Ù×÷¡£ÉÏÀýÖбíʾÈç¹û/etc/shadowÎļþ´æÔÚ
Ôò´òÓ¡¡± This computer uses shadow passwors¡±¡£Í¬Ñù»ò²Ù×÷(||)ÔÚshell±à³ÌÖÐÒ²ÊÇ
¿ÉÓõġ£ÕâÀïÓиöÀý×Ó£º
#!/bin/sh
mailfolder=/var/spool/mail/james
[ -r "$mailfolder" ]' '{ echo "Can not read $mailfolder" ; exit 1; }
echo "$mailfolder has mail from:"
grep "^From " $mailfolder
¸Ã½Å±¾Ê×ÏÈÅжÏmailfolderÊÇ·ñ¿É¶Á¡£Èç¹û¿É¶ÁÔò´òÓ¡¸ÃÎļþÖеÄ"From" Ò»ÐС£Èç¹û²»¿É¶Á
Ôò»ò²Ù×÷ÉúЧ£¬´òÓ¡´íÎóÐÅÏ¢ºó½Å±¾Í˳ö¡£ÕâÀïÓиöÎÊÌ⣬ÄǾÍÊÇÎÒÃDZØÐëÓÐÁ½¸öÃüÁ
¡¡¡¡-´òÓ¡´íÎóÐÅÏ¢
¡¡¡¡-Í˳ö³ÌÐò
¡¡¡¡ÎÒÃÇʹÓû¨À¨ºÅÒÔÄäÃûº¯ÊýµÄÐÎʽ½«Á½¸öÃüÁî·Åµ½Ò»Æð×÷Ϊһ¸öÃüÁîʹÓá£Ò»°ãº¯Êý½«ÔÚÏÂÎÄÌá¼°¡£
¡¡¡¡²»ÓÃÓëºÍ»ò²Ù×÷·û£¬ÎÒÃÇÒ²¿ÉÒÔÓÃif±í´ïʽ×÷ÈκÎÊÂÇ飬µ«ÊÇʹÓÃÓë»ò²Ù×÷·û»á¸ü±ãÀûºÜ¶à¡£


2.case
case :±í´ïʽ¿ÉÒÔÓÃÀ´Æ¥ÅäÒ»¸ö¸ø¶¨µÄ×Ö·û´®£¬¶ø²»ÊÇÊý×Ö¡£
case ... in
...) do something here ;;
esac
¡¡¡¡ÈÃÎÒÃÇ¿´Ò»¸öÀý×Ó¡£ fileÃüÁî¿ÉÒÔ±æ±ð³öÒ»¸ö¸ø¶¨ÎļþµÄÎļþÀàÐÍ£¬±ÈÈ磺
file lf.gz
¡¡¡¡Õ⽫·µ»Ø£º
lf.gz: gzip compressed data, deflated, original filename,
last modified: Mon Aug 27 23:09:18 2001, os: Unix
¡¡ÎÒÃÇÀûÓÃÕâÒ»µãдÁËÒ»¸ö½Ð×ösmartzipµÄ½Å±¾£¬¸Ã½Å±¾¿ÉÒÔ×Ô¶¯½âѹbzip2, gzip ºÍzip ÀàÐ͵ÄѹËõÎļþ£º
#!/bin/sh
ftype=`file "$1"`
case "$ftype" in
"$1: Zip archive"*)
¡¡¡¡unzip "$1" ;;
"$1: gzip compressed"*)
¡¡¡¡gunzip "$1" ;;
"$1: bzip2 compressed"*)
¡¡¡¡bunzip2 "$1" ;;
*) echo "File $1 can not be uncompressed with smartzip";;
esac
¡¡¡¡Äú¿ÉÄÜ×¢Òâµ½ÎÒÃÇÔÚÕâÀïʹÓÃÁËÒ»¸öÌØÊâµÄ±äÁ¿$1¡£¸Ã±äÁ¿°üº¬ÁË´«µÝ¸ø¸Ã³ÌÐòµÄµÚÒ»¸ö²ÎÊýÖµ¡£
Ò²¾ÍÊÇ˵£¬µ±ÎÒÃÇÔËÐУº
smartzip articles.zip
$1 ¾ÍÊÇ×Ö·û´® articles.zip
3. selsect
select ±í´ïʽÊÇÒ»ÖÖbashµÄÀ©Õ¹Ó¦Óã¬ÓÈÆäÉó¤ÓÚ½»»¥Ê½Ê¹Óá£Óû§¿ÉÒÔ´ÓÒ»×鲻ͬµÄÖµÖнøÐÐÑ¡Ôñ¡£
select var in ... ; do
¡¡break
done
.... now $var can be used ....
ÏÂÃæÊÇÒ»¸öÀý×Ó£º
#!/bin/sh
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other"; do
¡¡¡¡¡¡¡¡break
done
echo "You have selected $var"
¡¡¡¡ÏÂÃæÊǸýű¾ÔËÐеĽá¹û£º
What is your favourite OS?
1) Linux
2) Gnu Hurd
3) Free BSD
4) Other
#? 1
You have selected Linux
4.loop
loop±í´ïʽ£º
while ...; do
....
done
¡¡¡¡while-loop ½«ÔËÐÐÖ±µ½±í´ïʽ²âÊÔΪÕæ¡£will run while the expression that we test for is true.
¹Ø¼ü×Ö"break" ÓÃÀ´Ìø³öÑ­»·¡£¶ø¹Ø¼ü×Ö¡±continue¡±ÓÃÀ´²»Ö´ÐÐÓàϵIJ¿·Ö¶øÖ±½ÓÌøµ½ÏÂÒ»¸öÑ­»·¡£
¡¡¡¡
for-loop±í´ïʽ²é¿´Ò»¸ö×Ö·û´®Áбí (×Ö·û´®Óÿոñ·Ö¸ô) È»ºó½«Æ丳¸øÒ»¸ö±äÁ¿£º
for var in ....; do
¡¡ ....
done
ÔÚÏÂÃæµÄÀý×ÓÖУ¬½«·Ö±ð´òÓ¡ABCµ½ÆÁÄ»ÉÏ£º
#!/bin/sh
for var in A B C ; do
¡¡ echo "var is $var"
done
ÏÂÃæÊÇÒ»¸ö¸üΪÓÐÓõĽű¾showrpm£¬Æ书ÄÜÊÇ´òӡһЩRPM°üµÄͳ¼ÆÐÅÏ¢£º
#!/bin/sh
# list a content summary of a number of RPM packages
# USAGE: showrpm rpmfile1 rpmfile2 ...
# EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm
for rpmpackage in $*; do
¡¡if [ -r "$rpmpackage" ];then
¡¡¡¡echo "=============== $rpmpackage =============="
¡¡¡¡rpm -qi -p $rpmpackage
¡¡else
¡¡¡¡echo "ERROR: cannot read file $rpmpackage"
¡¡fi
done
¡¡¡¡ÕâÀï³öÏÖÁ˵ڶþ¸öÌØÊâµÄ±äÁ¿$*£¬¸Ã±äÁ¿°üº¬ÁËËùÓÐÊäÈëµÄÃüÁîÐвÎÊýÖµ¡£
Èç¹ûÄúÔËÐÐshowrpm openssh.rpm w3m.rpm webgrep.rpm
´Ëʱ $* °üº¬ÁË 3 ¸ö×Ö·û´®£¬¼´openssh.rpm, w3m.rpm and webgrep.rpm.

5. ÒýºÅ
ÔÚÏò³ÌÐò´«µÝÈκβÎÊý֮ǰ£¬³ÌÐò»áÀ©Õ¹Í¨Åä·ûºÍ±äÁ¿¡£ÕâÀïËùνÀ©Õ¹µÄÒâ˼ÊdzÌÐò»á°ÑͨÅä·û
£¨±ÈÈç*£©Ìæ»»³ÉºÏÊʵÄÎļþÃû£¬Ëü±äÁ¿Ìæ»»³É±äÁ¿Öµ¡£ÎªÁË·ÀÖ¹³ÌÐò×÷ÕâÖÖÌæ»»£¬Äú¿ÉÒÔʹÓÃ
ÒýºÅ£ºÈÃÎÒÃÇÀ´¿´Ò»¸öÀý×Ó£¬¼ÙÉèÔÚµ±Ç°Ä¿Â¼ÏÂÓÐһЩÎļþ£¬Á½¸öjpgÎļþ£¬ mail.jpg ºÍtux.jpg¡£
1.2 ±àÒëSHELL½Å±¾
#ch#!/bin/sh mod +x filename
¡¡cho *.jpg ¡È»ºó£ÉÒÔͨ¹äÈë£?./filename À´Ö´ÐÐÄúµÄ½Å±¾¡£
¡¡¡¡Õ⽫´òÓ¡³ö"mail.jpg tux.jpg"µÄ½á¹û¡£
¡¡ ¡¡¡¡ÒýºÅ (µ¥ÒýºÅºÍË«ÒýºÅ) ½«·ÀÖ¹ÕâÖÖͨÅä·ûÀ©Õ¹£º
#!/bin/sh
echo "*.jpg"
echo '*.jpg'
¡¡¡¡Õ⽫´òÓ¡"*.jpg" Á½´Î¡£
¡¡¡¡µ¥ÒýºÅ¸üÑϸñһЩ¡£Ëü¿ÉÒÔ·ÀÖ¹ÈκαäÁ¿À©Õ¹¡£Ë«ÒýºÅ¿ÉÒÔ·ÀֹͨÅä·ûÀ©Õ¹µ«ÔÊÐí±äÁ¿À©Õ¹¡£
#!/bin/sh
echo $SHELL
echo "$SHELL"
echo '$SHELL'
¡¡¡¡ÔËÐнá¹ûΪ£º
/bin/bash
/bin/bash
$SHELL
¡¡¡¡×îºó£¬»¹ÓÐÒ»ÖÖ·ÀÖ¹ÕâÖÖÀ©Õ¹µÄ·½·¨£¬ÄǾÍÊÇʹÓÃתÒå×Ö·û----·´Ð±¸Ë£º
echo *.jpg
echo $SHELL
¡¡¡¡Õ⽫Êä³ö£º
*.jpg
$SHELL
6. Here documents
µ±Òª½«¼¸ÐÐÎÄ×Ö´«µÝ¸øÒ»¸öÃüÁîʱ£¬here documents£¨ÒëÕß×¢£ºÄ¿Ç°»¹Ã»Óмûµ½¹ý¶Ô¸Ã´ÊÊʺϵķ­Ò룩
Ò»ÖÖ²»´íµÄ·½·¨¡£¶Ôÿ¸ö½Å±¾Ð´Ò»¶Î°ïÖúÐÔµÄÎÄ×ÖÊǺÜÓÐÓõģ¬´ËʱÈç¹ûÎÒÃÇËÄÓÐÄǸö here documents
¾Í²»±ØÓÃechoº¯ÊýÒ»ÐÐÐÐÊä³ö¡£ Ò»¸ö "Here document" ÒÔ << ¿ªÍ·£¬ºóÃæ½ÓÉÏÒ»¸ö×Ö·û´®£¬Õâ¸ö×Ö·û´®
»¹±ØÐë³öÏÖÔÚhere documentµÄĩβ¡£ÏÂÃæÊÇÒ»¸öÀý×Ó£¬ÔÚ¸ÃÀý×ÓÖУ¬ÎÒÃǶԶà¸öÎļþ½øÐÐÖØÃüÃû£¬²¢ÇÒ
ʹÓÃhere documents´òÓ¡°ïÖú£º
#!/bin/sh
# we have less than 3 arguments. Print the help text:
if [ $# -lt 3 ] ; then
cat <
ren -- renames a number of files using sed regular expressions
USAGE: ren 'regexp' 'replacement' files...
EXAMPLE: rename all *.HTM files in *.html:
¡¡ren 'HTM$' 'html' *.HTM
HELP
¡¡exit 0
fi
OLD="$1"
NEW="$2"
# The shift command removes one argument from the list of
# command line arguments.
shift
shift
# $* contains now all the files:
for file in $*; do
¡¡¡¡if [ -f "$file" ] ; then
¡¡¡¡¡¡newfile=`echo "$file" | sed "s/${OLD}/${NEW}/g"`
¡¡¡¡¡¡if [ -f "$newfile" ]; then
¡¡¡¡¡¡¡¡echo "ERROR: $newfile exists already"
¡¡¡¡¡¡else
¡¡¡¡¡¡¡¡echo "renaming $file to $newfile ..."
¡¡¡¡¡¡¡¡mv "$file" "$newfile"
¡¡¡¡¡¡fi
¡¡¡¡fi
done
¡¡ÕâÊÇÒ»¸ö¸´ÔÓһЩµÄÀý×Ó¡£ÈÃÎÒÃÇÏêϸÌÖÂÛһϡ£µÚÒ»¸öif±í´ïʽÅжÏÊäÈëÃüÁîÐвÎÊýÊÇ
·ñСÓÚ3¸ö (ÌØÊâ±äÁ¿$# ±íʾ°üº¬²ÎÊýµÄ¸öÊý) ¡£Èç¹ûÊäÈë²ÎÊýСÓÚ3¸ö£¬Ôò½«°ïÖúÎÄ×Ö´«µÝ
¸øcatÃüÁȻºóÓÉcatÃüÁÆä´òÓ¡ÔÚÆÁÄ»ÉÏ¡£´òÓ¡°ïÖúÎÄ×Öºó³ÌÐòÍ˳ö¡£Èç¹ûÊäÈë²ÎÊýµÈ
ÓÚ»ò´óÓÚ3¸ö£¬ÎÒÃǾͽ«µÚÒ»¸ö²ÎÊý¸³Öµ¸ø±äÁ¿OLD£¬µÚ¶þ¸ö²ÎÊý¸³Öµ¸ø±äÁ¿NEW¡£ÏÂÒ»²½£¬ÎÒ
ÃÇʹÓÃshiftÃüÁµÚÒ»¸öºÍµÚ¶þ¸ö²ÎÊý´Ó²ÎÊýÁбíÖÐɾ³ý£¬ÕâÑùÔ­À´µÄµÚÈý¸ö²ÎÊý¾Í³ÉΪ²Î
ÊýÁбí$*µÄµÚÒ»¸ö²ÎÊý¡£È»ºóÎÒÃÇ¿ªÊ¼Ñ­»·£¬ÃüÁîÐвÎÊýÁÐ±í±»Ò»¸ö½ÓÒ»¸öµØ±»¸³Öµ¸ø±äÁ¿$file¡£
½Ó×ÅÎÒÃÇÅжϸÃÎļþÊÇ·ñ´æÔÚ£¬Èç¹û´æÔÚÔòͨ¹ýsedÃüÁîËÑË÷ºÍÌæ»»À´²úÉúеÄÎļþÃû¡£È»ºó
½«·´¶ÌбÏßÄÚÃüÁî½á¹û¸³Öµ¸ønewfile¡£ÕâÑùÎÒÃǾʹﵽÁËÎÒÃǵÄÄ¿µÄ£ºµÃµ½Á˾ÉÎļþÃûºÍÐÂ
ÎļþÃû¡£È»ºóʹÓÃmvÃüÁî½øÐÐÖØÃüÃû¡£

4)º¯Êý
Èç¹ûÄúдÁËһЩÉÔ΢¸´ÔÓһЩµÄ³ÌÐò£¬Äú¾Í»á·¢ÏÖÔÚ³ÌÐòÖпÉÄÜÔÚ¼¸¸öµØ·½Ê¹ÓÃÁËÏàͬµÄ´úÂ룬
²¢ÇÒÄúÒ²»á·¢ÏÖ£¬Èç¹ûÎÒÃÇʹÓÃÁ˺¯Êý£¬»á·½±ãºÜ¶à¡£Ò»¸öº¯ÊýÊÇÕâ¸öÑù×ӵģº
functionname()
{
# inside the body $1 is the first argument given to the function
# $2 the second ...
body
}
ÄúÐèÒªÔÚÿ¸ö³ÌÐòµÄ¿ªÊ¼¶Ôº¯Êý½øÐÐÉùÃ÷¡£
¡¡¡¡ÏÂÃæÊÇÒ»¸ö½Ð×öxtitlebarµÄ½Å±¾£¬Ê¹ÓÃÕâ¸ö½Å±¾Äú¿ÉÒԸıäÖն˴°¿ÚµÄÃû³Æ¡£
ÕâÀïʹÓÃÁËÒ»¸ö½Ð×öhelpµÄº¯Êý¡£ÕýÈçÄú¿ÉÒÔ¿´µ½µÄÄÇÑù£¬Õâ¸ö¶¨ÒåµÄº¯Êý±»Ê¹ÓÃÁËÁ½´Î¡£
#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
¡¡¡¡cat <
xtitlebar -- change the name of an xterm, gnome-terminal or kde konsole
USAGE: xtitlebar [-h] "string_for_titelbar"
OPTIONS: -h help text
EXAMPLE: xtitlebar "cvs"
HELP
¡¡¡¡exit 0
}
# in case of error or if -h is given we call the function help:
[ -z "$1" ] && help
[ "$1" = "-h" ] && help
# send the escape sequence to change the xterm titelbar:
echo -e "33]0;$107"
#
Ôڽű¾ÖÐÌṩ°ïÖúÊÇÒ»Öֺܺõıà³ÌÏ°¹ß£¬ÕâÑù·½±ãÆäËûÓû§£¨ºÍÄú£©Ê¹ÓúÍÀí½â½Å±¾¡£
ÃüÁîÐвÎÊý
¡¡¡¡ÎÒÃÇÒѾ­¼û¹ý$* ºÍ $1, $2 ... $9 µÈÌØÊâ±äÁ¿£¬ÕâЩÌØÊâ±äÁ¿°üº¬ÁËÓû§´ÓÃüÁî
ÐÐÊäÈëµÄ²ÎÊý¡£Æù½ñΪֹ£¬ÎÒÃǽö½öÁ˽âÁËһЩ¼òµ¥µÄÃüÁîÐÐÓï·¨£¨±ÈÈçһЩǿÖÆÐÔµÄ
²ÎÊýºÍ²é¿´°ïÖúµÄ-hÑ¡Ï¡£µ«ÊÇÔÚ±àд¸ü¸´ÔӵijÌÐòʱ£¬Äú¿ÉÄܻᷢÏÖÄúÐèÒª¸ü¶àµÄ
×Ô¶¨ÒåµÄÑ¡Ïͨ³£µÄ¹ßÀýÊÇÔÚËùÓпÉÑ¡µÄ²ÎÊý֮ǰ¼ÓÒ»¸ö¼õºÅ£¬ºóÃæÔÙ¼ÓÉϲÎÊýÖµ (
±ÈÈçÎļþÃû)¡£
Óкö෽·¨¿ÉÒÔʵÏÖ¶ÔÊäÈë²ÎÊýµÄ·ÖÎö£¬µ«ÊÇÏÂÃæµÄʹÓÃcase±í´ïʽµÄÀý×ÓÎÞÒÅÊÇÒ»¸ö²»´íµÄ·½·¨¡£
#!/bin/sh
help()
{
¡¡cat <
This is a generic command line parser demo.
USAGE EXAMPLE: cmdparser -l hello -f -- -somefile1 somefile2
HELP
¡¡exit 0
}
while [ -n "$1" ]; do
case $1 in
¡¡¡¡-h) help;shift 1;; # function help is called
¡¡¡¡-f) opt_f=1;shift 1;; # variable opt_f is set
¡¡¡¡-l) opt_l=$2;shift 2;; # -l takes an argument -> shift by 2
¡¡¡¡--) shift;break;; # end of options
¡¡¡¡-*) echo "error: no such option $1. -h for help";exit 1;;
¡¡¡¡*) break;;
esac
done
echo "opt_f is $opt_f"
echo "opt_l is $opt_l"
echo "first arg is $1"
echo "2nd arg is $2"
¡¡¡¡Äú¿ÉÒÔÕâÑùÔËÐиýű¾£º
cmdparser -l hello -f -- -somefile1 somefile2
¡¡¡¡·µ»ØµÄ½á¹ûÊÇ£º
opt_f is 1
opt_l is hello
first arg is -somefile1
2nd arg is somefile2
¡¡¡¡Õâ¸ö½Å±¾ÊÇÈçºÎ¹¤×÷µÄÄØ£¿½Å±¾Ê×ÏÈÔÚËùÓÐÊäÈëÃüÁîÐвÎÊýÖнøÐÐÑ­»·£¬½«ÊäÈë²ÎÊý
Óëcase±í´ïʽ½øÐбȽϣ¬Èç¹ûÆ¥ÅäÔòÉèÖÃÒ»¸ö±äÁ¿²¢ÇÒÒƳý¸Ã²ÎÊý¡£¸ù¾ÝunixϵͳµÄ¹ßÀý£¬
Ê×ÏÈÊäÈëµÄÓ¦¸ÃÊÇ°üº¬¼õºÅµÄ²ÎÊý.
µÚ2²¿·Ö ʵÀý
ÏÖÔÚÎÒÃÇÀ´ÌÖÂÛ±àдһ¸ö½Å±¾µÄÒ»°ã²½Öè¡£ÈκÎÓÅÐãµÄ½Å±¾¶¼Ó¦¸Ã¾ßÓаïÖúºÍÊäÈë²ÎÊý¡£²¢ÇÒдһ¸öα½Å±¾£¨framework.sh£©£¬¸Ã½Å±¾°üº¬ÁË´ó¶àÊý½Å±¾¶¼ÐèÒªµÄ¿ò¼Ü½á¹¹£¬ÊÇÒ»¸ö·Ç³£²»´íµÄÖ÷Òâ¡£Õâʱºò£¬ÔÚдһ¸öеĽű¾Ê±ÎÒÃÇÖ»ÐèÒªÖ´ÐÐÒ»ÏÂcopyÃüÁ
cp framework.sh myscript
¡¡È»ºóÔÙ²åÈë×Ô¼ºµÄº¯Êý¡£
¡¡¡¡ÈÃÎÒÃÇÔÙ¿´Á½¸öÀý×Ó£º
¡¡¡¡¶þ½øÖƵ½Ê®½øÖƵÄת»»
¡¡¡¡½Å±¾ b2d ½«¶þ½øÖÆÊý (±ÈÈç 1101) ת»»ÎªÏàÓ¦µÄÊ®½øÖÆÊý¡£ÕâÒ²ÊÇÒ»¸öÓÃexprÃüÁî½øÐÐÊýѧÔËËãµÄÀý×Ó£º
#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
¡¡cat <
b2h -- convert binary to decimal
USAGE: b2h [-h] binarynum
OPTIONS: -h help text
EXAMPLE: b2h 111010
will return 58
HELP
¡¡exit 0
}
error()
{
¡¡¡¡# print an error and exit
¡¡¡¡echo "$1"
¡¡¡¡exit 1
}
lastchar()
{
¡¡¡¡# return the last character of a string in $rval
¡¡¡¡if [ -z "$1" ]; then
¡¡¡¡¡¡¡¡# empty string
¡¡¡¡¡¡¡¡rval=""
¡¡¡¡¡¡¡¡return
¡¡¡¡fi
¡¡¡¡# wc puts some space behind the output this is why we need sed:
¡¡¡¡numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
¡¡¡¡# now cut out the last char
¡¡¡¡rval=`echo -n "$1" | cut -b $numofchar`
}
chop()
{
¡¡¡¡# remove the last character in string and return it in $rval
¡¡¡¡if [ -z "$1" ]; then
¡¡¡¡¡¡¡¡# empty string
¡¡¡¡¡¡¡¡rval=""
¡¡¡¡¡¡¡¡return
¡¡¡¡fi
¡¡¡¡# wc puts some space behind the output this is why we need sed:
¡¡¡¡numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
¡¡¡¡if [ "$numofchar" = "1" ]; then
¡¡¡¡¡¡¡¡# only one char in string
¡¡¡¡¡¡¡¡rval=""
¡¡¡¡¡¡¡¡return
¡¡¡¡fi
¡¡¡¡numofcharminus1=`expr $numofchar "-" 1`
¡¡¡¡# now cut all but the last char:
¡¡¡¡rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`
}
while [ -n "$1" ]; do
case $1 in
¡¡¡¡-h) help;shift 1;; # function help is called
¡¡¡¡--) shift;break;; # end of options
¡¡¡¡-*) error "error: no such option $1. -h for help";;
¡¡¡¡*) break;;
esac
done
# The main program
sum=0
weight=1
# one arg must be given:
[ -z "$1" ] && help
binnum="$1"
binnumorig="$1"
while [ -n "$binnum" ]; do
¡¡¡¡lastchar "$binnum"
¡¡¡¡if [ "$rval" = "1" ]; then
¡¡¡¡¡¡¡¡sum=`expr "$weight" "+" "$sum"`
¡¡¡¡fi
¡¡¡¡# remove the last position in $binnum
¡¡¡¡chop "$binnum"
¡¡¡¡binnum="$rval"
¡¡¡¡weight=`expr "$weight" "*" 2`
done
echo "binary $binnumorig is decimal $sum"
¡¡¸Ã½Å±¾Ê¹ÓõÄËã·¨ÊÇÀûÓÃÊ®½øÖƺͶþ½øÖÆÊýȨֵ (1,2,4,8,16,..)£¬±ÈÈç¶þ½øÖÆ"10"¿É
ÒÔÕâÑùת»»³ÉÊ®½øÖÆ£º
0 * 1 + 1 * 2 = 2
¡¡¡¡ÎªÁ˵õ½µ¥¸öµÄ¶þ½øÖÆÊýÎÒÃÇÊÇÓÃÁËlastchar º¯Êý¡£¸Ãº¯ÊýʹÓÃwc -c¼ÆËã×Ö·û¸öÊý£¬
È»ºóʹÓÃcutÃüÁîÈ¡³öĩβһ¸ö×Ö·û¡£Chopº¯ÊýµÄ¹¦ÄÜÔòÊÇÒƳý×îºóÒ»¸ö×Ö·û¡£
ÎļþÑ­»·³ÌÐò
¡¡¡¡»òÐíÄúÊÇÏ뽫ËùÓз¢³öµÄÓʼþ±£´æµ½Ò»¸öÎļþÖеÄÈËÃÇÖеÄÒ»Ô±£¬µ«ÊÇÔÚ¹ýÁ˼¸¸öÔÂ
ÒÔºó£¬Õâ¸öÎļþ¿ÉÄÜ»á±äµÃºÜ´óÒÔÖÁÓÚʹ¶Ô¸ÃÎļþµÄ·ÃÎÊËٶȱäÂý¡£ÏÂÃæµÄ½Å±¾rotatefile
¿ÉÒÔ½â¾öÕâ¸öÎÊÌâ¡£Õâ¸ö½Å±¾¿ÉÒÔÖØÃüÃûÓʼþ±£´æÎļþ£¨¼ÙÉèΪoutmail£©Îªoutmail.1£¬
¶ø¶ÔÓÚoutmail.1¾Í±ä³ÉÁËoutmail.2 µÈµÈµÈµÈ...
#!/bin/sh
# vim: set sw=4 ts=4 et:
ver="0.1"
help()
{
¡¡¡¡cat <
rotatefile -- rotate the file name
USAGE: rotatefile [-h] filename
OPTIONS: -h help text
EXAMPLE: rotatefile out
This will e.g rename out.2 to out.3, out.1 to out.2, out to out.1
and create an empty out-file
The max number is 10
version $ver
HELP
¡¡¡¡exit 0
}
error()
{
¡¡¡¡echo "$1"
¡¡¡¡exit 1
}
while [ -n "$1" ]; do
case $1 in
¡¡¡¡-h) help;shift 1;;
¡¡¡¡--) break;;
¡¡¡¡-*) echo "error: no such option $1. -h for help";exit 1;;
¡¡¡¡*) break;;
esac
done
# input check:
if [ -z "$1" ] ; then
error "ERROR: you must specify a file, use -h for help"
fi
filen="$1"
# rename any .1 , .2 etc file:
for n in 9 8 7 6 5 4 3 2 1; do
¡¡¡¡if [ -f "$filen.$n" ]; then
¡¡¡¡¡¡¡¡p=`expr $n + 1`
¡¡¡¡¡¡¡¡echo "mv $filen.$n $filen.$p"
¡¡¡¡¡¡¡¡mv $filen.$n $filen.$p
¡¡¡¡fi
done
# rename the original file:
if [ -f "$filen" ]; then
¡¡¡¡echo "mv $filen $filen.1"
¡¡¡¡mv $filen $filen.1
fi
echo touch $filen
touch $filen
¡¡¡¡Õâ¸ö½Å±¾ÊÇÈçºÎ¹¤×÷µÄÄØ£¿ÔÚ¼ì²âÓû§ÌṩÁËÒ»¸öÎļþÃûÒÔºó£¬ÎÒÃǽøÐÐÒ»¸ö9µ½1µÄÑ­»·¡£Îļþ9±»ÃüÃûΪ10£¬Îļþ8ÖØÃüÃûΪ9µÈµÈ¡£Ñ­»·Íê³ÉÖ®ºó£¬ÎÒÃǽ«Ô­Ê¼ÎļþÃüÃûΪÎļþ1ͬʱ½¨Á¢Ò»¸öÓëԭʼÎļþͬÃûµÄ¿ÕÎļþ¡£
µ÷ÊÔ
¡¡¡¡×î¼òµ¥µÄµ÷ÊÔÃüÁȻÊÇʹÓÃechoÃüÁî¡£Äú¿ÉÒÔʹÓÃechoÔÚÈκλ³Òɳö´íµÄµØ·½´òÓ¡ÈκαäÁ¿Öµ¡£ÕâÒ²ÊǾø´ó¶àÊýµÄshell³ÌÐòÔ±Òª»¨·Ñ80%µÄʱ¼äÀ´µ÷ÊÔ³ÌÐòµÄÔ­Òò¡£Shell³ÌÐòµÄºÃ´¦ÔÚÓÚ²»ÐèÒªÖØбàÒ룬²åÈëÒ»¸öechoÃüÁîÒ²²»ÐèÒª¶àÉÙʱ¼ä¡£
¡¡¡¡shellÒ²ÓÐÒ»¸öÕæʵµÄµ÷ÊÔģʽ¡£Èç¹ûÔڽű¾"strangescript" ÖÐÓдíÎó£¬Äú¿ÉÒÔÕâÑùÀ´½øÐе÷ÊÔ£º
sh -x strangescript
¡¡¡¡Õ⽫ִÐиýű¾²¢ÏÔʾËùÓбäÁ¿µÄÖµ¡£
¡¡¡¡shell»¹ÓÐÒ»¸ö²»ÐèÒªÖ´Ðнű¾Ö»ÊǼì²éÓï·¨µÄģʽ¡£¿ÉÒÔÕâÑùʹÓãº
sh -n your_script
¡¡¡¡Õ⽫·µ»ØËùÓÐÓï·¨´íÎó
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 5 ÌõÆÀÂÛ

  1. dzj ÓÚ 2008-02-23 23:57:20·¢±í:

    ok
    thank you

  2. guotao715 ÓÚ 2008-02-19 06:03:15·¢±í:

    ѧϰÁË

  3. keke0987 ÓÚ 2007-07-18 18:49:48·¢±í:

    ·Ç³£¸Ðл

  4. akfvip ÓÚ 2007-07-08 00:39:15·¢±í:

    ѧϰÖÐ........................

  5. frankies ÓÚ 2007-07-04 11:20:18·¢±í:

    ÊÕÁË¡£Ð»Ð»