Çåµ¥ 1. ¿ç¶ą̀¼ÆËã»úͬ²½Ö÷Ŀ¼µÄ¼òµ¥ Shell ½Å±¾
#! /bin/zsh
for each machine (groucho chico harpo)
rsync -e ssh --times --perms --recursive --delete $HOME $machine:
end
ÈôÒª½«Çåµ¥ 1 ÓÃ×÷ Shell ½Å±¾£¬¿ÉÒÔ½«ÉÏÊöÄÚÈݱ£´æµ½Ä³¸öÎļþ----ÀýÈç simpleprop.zsh----²¢ÔËÐÐ chmod +x simpleprop.zsh ÒÔʹ¸ÃÎļþ³ÉΪ¿ÉÖ´ÐÐÎļþ¡£Äú¿ÉÒÔͨ¹ýÊäÈë ./simpleprop.zsh À´ÔËÐиýű¾¡£
Èç¹ûÄúÏë²é¿´ Z Shell ÈçºÎÕ¹¿ªÃ¿¸öÃüÁ¿ÉÒÔ½« -x Ñ¡ÏîÌí¼Óµ½½Å±¾µÄ #!£¨# ºÅ-¸Ð̾ºÅ¶Ôͨ³£³ÆÎª shuh-bang£©ÐеĽá⣬ÈçÏÂËùʾ£º
#! /bin/zsh -x
¸Ã½Å±¾¶Ô groucho¡¢chico ºÍ harpo ÖеÄÿһ̨¼ÆËã»úÔËÐÐ rsync ÃüÁ²¢½« $HOME Ìæ»»ÎªÄúµÄÖ÷Ŀ¼£¨ÀýÈ磬/home/joe£©£¬½« $machine Ìæ»»Îª¼ÆËã»úÃû³Æ¡£
ÈçÇåµ¥ 1 Ëùʾ£¬±äÁ¿ºÍÖîÈçÑ»·µÈ½Å±¾¿ØÖƽṹʹ½Å±¾¸üÈÝÒ×±àдºÍά»¤¡£Èç¹ûÄúÏ뽫µÚËĄ̈¼ÆËã»ú£¨ÀýÈç zeppo£©°üÀ¨µ½¼ÆËã»ú³ØÖУ¬Ö»Ð轫ÆäÌí¼Óµ½¸ÃÁÐ±í¡£Èç¹ûÄú±ØÐë¸ü¸Ä rsync ÃüÁ±ÈÈç˵Ìí¼ÓÁíÒ»¸öÑ¡ÏÔòÖ»Ðè±à¼Ò»¸öʵÀý¡£ÓëÔÚ´«Í³±à³ÌÖÐÒ»Ñù£¬ÄúÒ²Ó¦¸ÃŬÁ¦±ÜÃâÔÚ Shell ½Å±¾ÖнøÐмôÇкÍÕ³Ìù¡£
ʹÓÃÇ¡µ±µÄ²ÎÊý
ÆäËû Shell ½Å±¾ÐèÒª²ÎÊý£¬»òÒª´¦ÀíµÄ¶ÔÏó----Îļþ¡¢Ä¿Â¼¡¢¼ÆËã»úÃû³Æ----µÄ¶¯Ì¬ÁÐ±í¡£ÀýÈ磬¿¼ÂÇÇåµ¥ 2£¬ÕâÊÇǰһʾÀýµÄ±äÌ壬ËüÔÊÐíÄúʹÓÃÃüÁîÐÐÀ´Ö¸¶¨ÄúÏëÒªÓë֮ͬ²½µÄ¼ÆËã»ú¡£
Çåµ¥ 2. ÔÊÐíÄúÖ¸¶¨Òª´¦ÀíµÄ¼ÆËã»úµÄÇåµ¥ 1 µÄ±äÌå
#! /bin/zsh
for each machine
rsync -e ssh --times --perms --recursive --delete $HOME $machine:
end
¼ÙÉèÄú½«Çåµ¥ 2 ±£´æÔÚÃûΪ synch.zsh µÄÎļþÖУ¬ÄúµÃ°´ÕÕ zsh synch.zsh moe larry curly µÄÐÎʽµ÷Óøýű¾£¬ÒÔ½«Ö÷Ŀ¼¸´ÖƵ½ÁíÍâµÄ¼ÆËã»ú larry ºÍ curly¡£
foreach ÐÐÉÏȱÉÙµÄÁÐ±í²¢²»ÊÇÊäÈë´íÎó£ºÈç¹ûÄúÊ¡ÂÔij¸öÁÐ±í£¬Ôò foreach ½á¹¹½«´¦ÀíÃüÁîÐÐÉϸø³öµÄ²ÎÊýÁÐ±í¡£ÃüÁîÐвÎÊýÒ²³ÆÎªÎ»ÖòÎÊý (positional parameter)£¬ÒòΪij¸ö²ÎÊýÔÚÃüÁîÐÐÉϵÄλÖÃͨ³£ÔÚÓïÒåÉϷdz£ÖØÒª¡£
ÀýÈ磬Èç¹ûÄúδ Ö¸¶¨ÈκβÎÊý£¬Ôò Çåµ¥ 2 ¿ÉÒÔÀûÓÃλÖòÎÊýµÄ´æÔÚÐÔ»ò·Ç´æÔÚÐÔÀ´ÌṩÓаïÖúµÄÓ÷¨ÐÅÏ¢¡£ÔöÇ¿µÄ½Å±¾ÈçÇåµ¥ 3 Ëùʾ¡£
Çåµ¥ 3. Ðí¶à½Å±¾½«ÔÚδÌṩ²ÎÊýʱÌṩÓаïÖúµÄÏûÏ¢
#! /bin/zsh
if [[ -z $1 || $1 == "--help" ]]
then
echo "usage: $0 machine [machine ...]
fi
foreach machine
rsync -e ssh --times --perms --recursive --delete $HOME $machine:
end
ÃüÁîÐÐÉϵÄÿ¸ö¿Õ¸ñ·Ö¸ôµÄ×Ö·û´®±ä³ÉÁËλÖòÎÊý£¬°üÀ¨Ëùµ÷ÓõĽű¾µÄÃû³Æ¡£Òò´Ë£¬ÃüÁî synch.zsh Ö»ÓÐÒ»¸öλÖòÎÊý $0¡£synch.zsh --help ÃüÁîÓÐÁ½¸öλÖòÎÊý£º$0 ºÍ $1£¬ÆäÖÐ $1 ÊÇ×Ö·û´® --help¡£
ËùÒÔ£¬Çåµ¥ 3 ±íʾ¡°Èç¹ûµÚÒ»¸öλÖòÎÊýΪ¿Õ£¨-z ²Ù×÷·û²âÊÔ¿Õ×Ö·û´®£©»ò£¨ÓÉ || ±íʾ£©Èç¹ûµÚÒ»¸ö²ÎÊýµÈÓÚ¡®--help¡¯£¬Ôò´òÓ¡Ó÷¨ÐÅÏ¢¡±¡££¨Èç¹ûÄú¸Õ¿ªÊ¼±àд½Å±¾£¬¿ÉÒÔ¿¼ÂÇÔÚÿ¸ö½Å±¾ÖÐÌṩÓ÷¨ÐÅÏ¢×÷ΪÌáʾ¡£ËüÌáÐÑÆäËûÈË----ÉõÖÁÄú×Ô¼º£¬Èç¹ûÄúÍüÁ˵ϰ----ÈçºÎʹÓøýű¾¡££©
¶ÌÓï [[ -z $1 || $1 == "--help" ]] ÊÇ if Óï¾äµÄ Ìõ¼þ£¬µ«ÄúÒ²¿ÉÒÔ½«Í¬ÑùµÄÌõ¼þ×Ó¾äÓÃ×÷ÃüÁ²¢½«ÆäÓëÆäËûÃüÁî×éºÏʹÓÃÒÔ¿ØÖÆÍ¨¹ý½Å±¾µÄÁ÷¡£Çë²é¿´Çåµ¥ 4¡£Ëüö¾ÙÄúµÄ $PATH ÖеÄËùÓпÉÖ´ÐÐÃüÁ²¢½«Ìõ¼þÓëÆäËûÃüÁî×éºÏʹÓÃÒÔÖ´ÐÐÊʵ±µÄ¹¤×÷¡£
Çåµ¥ 4. Áгö $PATH ÖеÄÃüÁî
#! /bin/zsh
directories=(`echo $PATH | column -s ':' -t`)
for directory in $directories
do
[[ -d $directory ]] || continue
pushd "$directory"
for file in *
do
[[ -x $file && ! -d $file ]] || continue
echo $file
done
popd
done | sort | uniq
´Ë½Å±¾ÖÐÖ´ÐÐÁËÏ൱¶àµÄ²Ù×÷£¬ÎÒÃǽ«Ëüϸ·ÖΪÒÔϼ¸²¿·Ö£º
µÚÒ»¸öʵ¼Ê½Å±¾ÐÐ----directories=(`echo $PATH | column -s ':' -t`)----´´½¨Ö¸¶¨Ä¿Â¼µÄÊý×é¡£ÄúÔÚ zsh ÖÐͨ¹ý½«²ÎÊý·ÅÔÚÀ¨ºÅÖÐÀ´´´½¨Êý¾Ý£¬ÀýÈç directories=(...)¡£ÔÚ´ËÀýÖУ¬Êý×éÔªËØÊÇͨ¹ýÔÚÿ¸öðºÅ£¨column -s ':'£©´¦·Ö²ð $PATH ÒÔ²úÉú¿Õ¸ñ·Ö¸ôµÄĿ¼ÁÐ±í£¨column µÄ -t ²ÎÊý£©À´Éú³ÉµÄ¡£
¶ÔÓÚÁбíÖеÄÿ¸öĿ¼£¬¸Ã½Å±¾³¢ÊÔö¾Ù¸ÃĿ¼ÖеĿÉÖ´ÐÐÎļþ¡£²½Öè 3 ÖÁ²½Öè 6 ÃèÊöÁ˸ùý³Ì¡£
[[ -d $directory ]] || continue ÐÐÊÇËùνµÄ short-circuiting ÃüÁîµÄÒ»¸öʾÀý¡£short-circuiting ÃüÁîÔÚÆäÂß¼Ìõ¼þ²úÉúÈ·¶¨µÄ½á¹ûʱÁ¢¼´ÖÕÖ¹¡£
ÀýÈ磬[[ -d $directory ]] || continue ¶ÌÓïʹÓÃÂß¼¡°»ò¡±(||)----ËüÊ×ÏÈÖ´ÐеÚÒ»¸öÃüÁ²¢ÇÒ----µ±ÇÒ½öµ±----µÚÒ»¸öÃüÁîʧ°Üʱ²ÅÖ´Ðеڶþ¸öÃüÁî¡£Òò´Ë£¬Èç¹û $directory ÖеÄÌõÄ¿´æÔÚ£¬²¢ÇÒÊÇÒ»¸öĿ¼£¨-d ²Ù×÷·û£©£¬Ôò²âÊԳɹ¦£¬ÇóÖµ½áÊø£¬²¢ÇÒ continue ÃüÁËüÌø¹ýµ±Ç°ÔªËصĴ¦Àí£©ÓÀÔ¶²»»áÖ´ÐС£
È»¶ø£¬Èç¹ûµÚÒ»¸ö²âÊÔʧ°Ü£¬Ôò»áÖ´ÐиÃÂß¼µÄÏÂÒ»¸öÌõ¼þ»òÖ´ÐÐ continue¡££¨continue ʼÖճɹ¦£¬Òò´ËËüͨ³£³öÏÖÔÚ short-circuiting ÃüÁîµÄ×îºó£©¡£
»ùÓÚÂß¼¡°Ó롱(&&) µÄ Short-circuiting Ê×ÏÈÖ´ÐеÚÒ»¸öÃüÁ²¢ÇÒ----µ±ÇÒ½öµ±----µÚÒ»¸öÃüÁî³É¹¦Ê±²ÅÖ´Ðеڶþ¸öÃüÁî¡£
pushd ºÍ¶ÔÓ¦µÄ popd ·Ö±ðÓÃÓÚÔÚ´¦ÀíǰÇл»µ½ÐÂĿ¼ºÍÔÚ´¦ÀíºóÇл»µ½ÏÈǰµÄĿ¼¡£Ê¹ÓÃĿ¼¶ÑÕ»ÊÇÒ»ÖÖÀíÏëµÄ½Å±¾¼¼Êõ£¬ÓÃÓÚά³ÖÄúÔÚÎļþϵͳÖеÄλÖá£
ÄÚ²¿µÄ for Ñ»·Ã¶¾Ùµ±Ç°¹¤×÷Ŀ¼ÖеÄËùÓÐÎļþ----ͨÅä·û *£¨ÐǺţ©Æ¥ÅäËùÓÐÌõÄ¿----È»ºó²âÊÔÿ¸öÌõÄ¿ÊÇ·ñΪÎļþ¡£[[ -x $file && ! -d $file ]] || continue Ðбíʾ¡°Èç¹û $file ´æÔÚ²¢ÇÒÊÇ¿ÉÖ´ÐÐÎļþ¶øÇÒ²»ÊÇĿ¼£¬Ôò´¦ÀíËü£»·ñÔòÖ´ÐÐ continue¡±¡£
×îºó£¬Èç¹ûÇ°ÃæµÄËùÓÐÌõ¼þ¶¼Âú×㣬ÔòʹÓà echo À´ÏÔʾÎļþÃû¡£
ÄúŪÃ÷°×¸Ã½Å±¾µÄ×îºóÒ»ÐÐÁËÂð£¿Äú¿ÉÒÔ½«´ó¶àÊý¿ØÖƽṹµÄÊä³ö·¢Ë͸øÁíÒ»¸ö unix ÃüÁî----±Ï¾¹£¬Shell ½«¸Ã¿ØÖƽṹÊÓΪһ¸öÃüÁî¡£Òò´Ë£¬Õû¸ö½Å±¾µÄÊä³öͨ¹ý sort¡¢È»ºóͨ¹ý uniq ½øÐйܵÀ´«Ê䣬ÒÔ²úÉúÔÚÄúµÄ $PATH ÖÐÕÒµ½µÄΨһÃüÁîµÄ×ÖĸÅÅÐòÁÐ±í¡£
Èç¹û½«Çåµ¥ 4 ±£´æµ½Ò»¸öÃûΪ listcmds.zsh µÄ¿ÉÖ´ÐÐÎļþ£¬ÔòÊä³ö¿ÉÄÜÀàËÆÈçÏ£º
$ ./listcmds.zsh
[
a2p
ab
ac
accept
accton
aclocal
short-circuiting ÃüÁîÔڽű¾Öзdz£ÓÐÓá£ËüÔÚµ¥¸öÃüÁîÖÐ×éºÏÁËÌõ¼þºÍ²Ù×÷¡£¶øÇÒÓÉÓÚÿ¸ö UNIX ÃüÁî¶¼·µ»ØÒ»¸öָʾ³É¹¦»òʧ°ÜµÄ״̬´úÂ룬Òò´Ë£¬Äú¿ÉÒÔʹÓÃÈκÎÃüÁî×÷Ϊ¡°Ìõ¼þ¡±----¶ø²»½ö½öÊÇʹÓòâÊÔ²Ù×÷·û¡£¸ù¾ÝÔ¼¶¨£¬unix ·µ»ØÁã (0) ±íʾ³É¹¦£¬·µ»Ø·ÇÁã±íʾʧ°Ü£¬ÆäÖзÇÁãÖµ·´Ó³Ëù·¢ÉúµÄ´íÎóÀàÐÍ¡£
ÀýÈ磬Èç¹û½« [[ -d $directory ]] || continue ÐÐÌæ»»Îª cd $directory || continue£¬Ôò¿ÉÒÔ´ÓÇåµ¥ 4 ÖÐÏû³ý pushd ºÍ popd¡£Èç¹û cd ÃüÁî³É¹¦£¬ÔòËü»á·µ»Ø 0£¬²¢ÇÒÂß¼¡°»ò¡±µÄÇóÖµ¿ÉÒÔÁ¢¼´½áÊø¡£È»¶ø£¬Èç¹û cd ʧ°Ü£¬ÔòËü»á·µ»Ø·ÇÁ㣬²¢ÇÒ»áÖ´ÐÐ continue¡£
²»ÒªÉ¾³ý¡£Ó¦´æµµ£¡
ÏÖ´ú UNIX Shell----bash¡¢ksh¡¢zsh----ÌṩÁËÐí¶à¿ØÖƽṹºÍ²Ù×÷ÒÔ´´½¨¸´ÔӵĽű¾¡£ÓÉÓÚÄú¿ÉÒÔµ÷ÓÃËùÓÐ unix ÃüÁîÀ´½«Êý¾Ý´ÓÒ»ÖÖÐÎʽ´¦ÀíΪÁíÒ»ÖÖÐÎʽ£¬Shell ½Å±¾±à³Ì¼¸ºõÓëÖîÈç C »ò Perl µÈÍêÕûÓïÑÔÖеıà³ÌÒ»Ñù·á¸»¡£
Äú¿ÉÒÔʹÓýű¾À´×Ô¶¯»¯¼¸ºõËùÓиöÈË»òϵͳÈÎÎñ¡£½Å±¾¿ÉÒÔ¼àÊÓ¡¢´æµµ¡¢¸üС¢ÉÏÔØ¡¢ÏÂÔØºÍת»»Êý¾Ý¡£Ò»¸ö½Å±¾¿ÉÒÔÖ»Óе¥Ðлò°üÀ¨ÎÞÊý¸ö×Óϵͳ¡£ÈÎÎñÎÞÂÛ´óС£¬¾ù¿Éͨ¹ý½Å±¾À´´¦Àí¡£Êµ¼ÊÉÏ£¬Èç¹ûÄú²é¿´ /etc/init.d Ŀ¼£¬»á¿´µ½ÔÚÿ´ÎÆô¶¯¼ÆËã»úʱÔËÐзþÎñµÄ¸÷ÖÖ Shell ½Å±¾¡£Èç¹ûÄú´´½¨ÁËÒ»¸ö·Ç³£ÓÐÓõĽű¾£¬ÄúÉõÖÁ¿ÉÒÔ½«Ëü²¿ÊðΪϵͳ·¶Î§µÄʵÓóÌÐò¡£Ö»Ð轫Æä·Åµ½Óû§µÄ $PATH ÉϵÄij¸öĿ¼ÖС£
ÈÃÎÒÃÇ´´½¨Ò»¸öʵÓóÌÐò£¬ÒÔÁ·Ï°Äúз¢Ïֵľ÷ÇÏ¡£½Å±¾ myrm ½«Ì滻ϵͳ×Ô¼ºµÄ rm ʵÓóÌÐò¡£Óë³¹µ×ɾ³ýij¸öÎļþ²»Í¬£¬myrm °ÑҪɾ³ýµÄÎļþ¸´ÖƵ½Ä³¸ö´æµµ£¬¶ÔÆä½øÐÐΨһÃüÃûÒÔ±ãÄúÒÔºóÄܹ»ÕÒµ½Ëü£¬È»ºóÔÙɾ³ýÔʼÎļþ¡£myrm ½Å±¾ÓÐЧµ«ÊǷdz£¼òµ¥£¬²¢ÇÒÄú»¹¿ÉÒÔÌí¼ÓÐí¶àÔÓÏÄÜ¡£Äú»¹¿ÉÒÔ±àдһ¸ö¹ã·ºµÄ unrm£¨³·Ïúɾ³ý£©½Å±¾×÷ΪÅäÌ×ʵÓóÌÐò¡££¨Äú¿ÉÒÔËÑË÷ Internet À´ÕÒµ½¸÷ÖÖ¸÷ÑùµÄʵÏÖ¡££©
myrm ½Å±¾ÈçÇåµ¥ 5 Ëùʾ¡£
Çåµ¥ 5. ÓÃÓÚÔÚ´ÓÎļþϵͳÖÐɾ³ýÎļþ֮ǰ±¸·Ý¸ÃÎļþµÄ¼òµ¥ÊµÓóÌÐò
#! /bin/zsh
backupdir=$HOME/.tomb
systemrm=/bin/rm
if [[ -z $1 || $1 == "--help" ]]
then
exec $systemrm
fi
if [[ ! -d $backupdir ]]
then
mkdir -m 0700 $backupdir || echo "$0: Cannot create $backupdir"; exit
fi
args$=$( getopt dfiPRrvw $* ) || exec $systemrm
count=0
flags = ""
foreach argument in $args
do
case $argument in
--) break;
;;
*) flags="$flags $argument";
(( count=$count + 1 ));
;;
esac
done
shift $(( $count ))
for file
do
[[ -e $file ]] || continue
copyfile=$backupdir/$(basename $file).$(date "+%m.%d.%y.%H.%M.%S")
/bin/cp -R $file $copyfile
done
exec $systemrm $=flags "$@"
ÄúÓ¦¸Ã·¢Ïָà Shell ½Å±¾ºÜÈÝÒ×Àí½â£¬¾¡¹ÜÆäÖдæÔÚһЩ֮ǰÉÐδÌÖÂÛ¹ýµÄÐÂÄÚÈÝ¡£ÈÃÎÒÃÇ̽ÌÖÒ»ÏÂÄÇЩÐÂÄÚÈÝ£¬È»ºó²é¿´Õû¸ö½Å±¾¡£
µ± Shell ÔËÐÐij¸öÃüÁÈç cp »ò ls£©Ê±£¬Ëü»áΪ¸ÃÃüÁî²úÉúÒ»¸öнø³Ì£¬È»ºóÔÚ¼ÌÐøÖ®Ç°µÈ´ý¸Ã£¨×Ó£©½ø³ÌÍê³É¡£exec ÃüÁÆô¶¯ÁíÍâÒ»¸öÃüÁµ«ÊÇÓë²úÉúнø³Ì²»Í¬£¬exec ʹÓÃÒ»¸öÐÂÃüÁîÀ´¡°Ìæ»»¡±µ±Ç°½ø³Ì----¼´ Shell ½ø³Ì----µÄÈÎÎñ¡£»»¾ä»°Ëµ£¬exec ÖØÓÃͬһ½ø³ÌÀ´Æô¶¯Ò»¸öÐÂÈÎÎñ¡£Ôڸýű¾µÄÉÏÏÂÎÄÖУ¬exec Á¢¼´¡°ÖÕÖ¹¡±¸Ã½Å±¾²¢Æô¶¯Ö¸¶¨µÄÈÎÎñ¡£
unix ʵÓóÌÐò getopt ɨÃèλÖòÎÊýÒÔ»ñµÃÄúÖ¸¶¨µÄÃüÃû²ÎÊý¡£ÕâÀdfiPRrvw Áбí²éÕÒ -d¡¢-f¡¢-i¡¢-P¡¢-R¡¢-r¡¢-v ºÍ -w¡£Èç¹û³öÏÖ±ðµÄÑ¡ÏÔò getopt ½«»áʧ°Ü¡£·ñÔò£¬getopt ·µ»ØÒ»¸öÒÔÌØÊâ×Ö·û´® -- ½áβµÄÑ¡Ïî×Ö·û´®¡£
shift ÃüÁî´Ó×óµ½ÓÒɾ³ýλÖòÎÊý¡£ÀýÈ磬Èç¹ûÃüÁîÐÐΪ myrm, -r -f -P file1 file2 file3£¬Ôò shift 3 ½«·Ö±ðɾ³ý $0¡¢$1 ºÍ $2£¬»ò -r¡¢-f ºÍ -P¡£file1¡¢file2 ºÍ file3 ½«±»ÖØÐ±àºÅΪ $0¡¢$1 ºÍ $2¡£
case Óï¾äµÄ¹¤×÷·½Ê½Ó봫ͳ±à³ÌÓïÑÔÖеĶÔÓ¦½á¹¹ÏàËÆ¡£Ëü½«Æä²ÎÊýÓëÁбíÖеÄÿ¸öģʽ±È½Ï£»µ±ÕÒµ½Æ¥ÅäÏîʱ£¬ÔòÖ´ÐжÔÓ¦µÄ´úÂë¡£ÓëÔÚ Shell Öзdz£ÀàËÆ£¬* Æ¥ÅäËùÓÐÌõÄ¿£¬²¢ÇÒ¿ÉÓÃ×÷ÔÚδÕÒµ½ÆäËûÆ¥ÅäÏîʱµÄȱʡ²Ù×÷¡£
ÌØÊâ·ûºÅ $@ Õ¹¿ªÎªËùÓУ¨ÆäÓࣩµÄλÖòÎÊý¡£
zsh ²Ù×÷·û $= Ôڿհױ߽紦²ð·Öµ¥´Ê¡£µ±ÄúÓÐÒ»¸ö·Ç³£³¤µÄ×Ö·û´®£¬²¢ÇÒÏ£Íû½«¸Ã×Ö·û´®²ð·ÖΪ¸÷¸ö²ÎÊýʱ£¬$= ÊǷdz£ÓÐÓõġ£ÀýÈ磬Èç¹û±äÁ¿ x °üº¬×Ö·û´® '-r -f'----ÕâÊÇÒ»¸ö¾ßÓÐÎå¸ö×Ö·ûµÄµ¥´Ê----$=x ½«±äΪÁ½¸öµ¥¶ÀµÄµ¥´Ê -r ºÍ -f¡£
¸ø³öÕâЩ½âÊÍÖ®ºó£¬ÄúÏÖÔÚÓ¦¸ÃÄܹ»Ïêϸ·ÖÎö¸Ã½Å±¾ÁË¡£ÏÂÃæÈÃÎÒÃÇÖð¿éµØÑо¿Ò»Ï¸ôúÂ룺
µÚÒ»¸ö¿éÉèÖÃÕû¸ö½Å±¾ÖÐʹÓõıäÁ¿¡£
ÏÂÒ»¸ö¿éÓ¦¸ÃÊǷdz£ÊìϤµÄ£ºËüÔÚδÌṩ²ÎÊýʱ´òÓ¡Ó÷¨ÐÅÏ¢¡£ËüΪʲôִÐÐ (exec) ʵ¼ÊµÄ rm ʵÓóÌÐòÄØ£¿Èç¹ûÄú½«´Ë½Å±¾ÃüÃûΪ¡°rm¡±²¢½«Æä·ÅÔÚ $PATH Öп¿Ç°µÄλÖã¬ÔòËü¾Í¿ÉÒԳ䵱 /bin/rm µÄÌæ´úÕß¡£¸Ã½Å±¾µÄ´íÎóÑ¡ÏîÒ²ÊÇ /bin/rm µÄ´íÎóÑ¡ÏÒò´Ë¸Ã½Å±¾ÔÊÐí /bin/rm ÌṩÓ÷¨ÐÅÏ¢¡£
ÏÂÒ»¸ö¿éÔÚ±¸·ÝĿ¼²»´æÔÚʱ´´½¨¸ÃĿ¼¡£Èç¹û mkdir ʧ°Ü£¬Ôò¸Ã½Å±¾ÖÕÖ¹²¢ÏÔʾÊʵ±µÄ´íÎóÏûÏ¢¡£
ÏÂÒ»¸ö¿é²éÕÒλÖòÎÊýÁбíÖÐµÄ dash ²ÎÊý¡£Èç¹û getopt ³É¹¦£¬Ôò $args ¾ßÓÐÒ»¸öÑ¡ÏîÁÐ±í¡£Èç¹û getopt ʧ°Ü£¬ÀýÈçÔÚËüÎÞ·¨Ê¶±ðij¸öÑ¡ÏîµÄʱºò£¬ÔòËü»á´òÓ¡´íÎóÏûÏ¢£¬²¢ÇҸýű¾½«Í˳ö²¢ÏÔʾÓ÷¨ÐÅÏ¢¡£
ËæºóµÄ¿é²¶»ñÒ»¸ö×Ö·û´®ÖÐÖ¼ÔÚÌṩ¸ø rm µÄËùÓÐÑ¡Ïî¡£µ±Óöµ½ÌØÊâ getopt Ñ¡Ïî -- ʱ£¬Ñ¡ÏîÊÕ¼¯¹ý³ÌÍ£Ö¹¡£shift ´Ó²ÎÊýÁбíÖÐɾ³ýËùÓÐÒÑ´¦ÀíµÄ²ÎÊý£¬±£Áô´ý´¦ÀíµÄÎļþºÍĿ¼ÁÐ±í¡£
´ÓÒÔ for file ¿ªÍ·µÄ¿é¸´ÖÆÃ¿¸öÎļþºÍĿ¼£¬ÒÔ±ãÔÚÄú×Ô¼ºµÄ´æµµÄ¿Â¼Öб£´æËüÃÇ¡£Ã¿¸öÎļþµÄĿ¼±»Öð×Ö (-R) ¸´ÖƵ½´æµµÄ¿Â¼£¬²¢¸½´øµ±Ç°ÈÕÆÚºÍʱ¼ä×÷Ϊºó׺£¬ÒÔÈ·±£¸Ã¸±±¾ÊÇΨһµÄ£¬²¢ÇÒ²»»á¸ÄдÒÔǰ´æµµµÄ¾ßÓÐÏàͬÃû³ÆµÄÌõÄ¿¡£
×îºó£¬Ê¹Óô«µÝ¸ø¸Ã½Å±¾µÄÏàͬÃüÁîÐÐÑ¡ÏîÀ´É¾³ýÎļþºÍĿ¼¡£
È»¶ø£¬Èç¹ûÄúÅöÇÉÐèÒª¸Õ²Åɾ³ý£¨ÒâÍâɾ³ý£¿£©µÄÎļþ»òĿ¼£¬Äú¿ÉÒÔÔÚ´æµµÖвéÕÒÔʼ¸±±¾¡£
Ïò×Ô¶¯»¯½ø¾ü
ÄúʹÓà unix µÄʱ¼äÔ½¶à£¬¾ÍÔ½ÓпÉÄÜ´´½¨½Å±¾¡£½Å±¾¿ÉÒÔ½ÚÊ¡ÖØÐÂÊäÈ븴ÔӵĽϳ¤ÃüÁîÐòÁÐËùÐèµÄʱ¼äºÍ¾«Á¦£¬²¢ÇÒ»¹¿ÉÒÔ·ÀÖ¹·¢Éú´íÎó¡£Web ÉϳäÂúÁËÆäËûÈËÒÑ´´½¨µÄÓÃÓÚÐí¶àÄ¿µÄµÄÓÐÓýű¾¡£ºÜ¿ìÄúÒ²»á·¢²¼×Ô¼ºµÄÉñÆæ½Å±¾¡£