´óÊý¾Ý¼¼Êõ
»±àд¿ìËÙ°²È« Bash ½Å±¾µÄ½¨ÒéLinux

tm

»ù´¡

°²È«

±à³Ì

Bash

±à³ÌÓïÑÔ
×òÌìÎÒºÍһЩÅóÓÑÁÄÆðBash£¬ÎÒÒâʶµ½£º¼´Ê¹ÎÒÒѾʹÓÃBashÊ®¶àÄêÁË£¬ÏÖÔÚ»¹ÓÐһЩ»ù´¡µÄÔÓÏÎÒÀí½âµÄ²¢²»ÊǺÜÇåÎú¡£ ÏñÍù³£Ò»Ñù£¬ÎÒÈÏΪÎÒÓ¦¸Ãдһ¸ö²©ÎÄ¡£
ÎÒÃÇ»á°üº¬£º
һЩbash»ù´¡ÖªÊ¶£¨¡°ÄãÔõôдһ¸öforÑ»·¡±£©
ÔÓÏîÊÂÒË£¨¡°×ÜÊÇÒýÓÃÄãµÄbash±äÁ¿¡±£©
bash½Å±¾°²È«Ìáʾ£¨¡°×ÜÊÇʹÓÃset -u¡±£©
Èç¹ûÄã±àдshell½Å±¾£¬²¢ÇÒÄãûÓÐÔĶÁÕâÆªÎÄÕÂÖÐÆäËûÈκÎÄÚÈÝ£¬ÄãÓ¦¸ÃÖªµÀÓÐÒ»¸öshell½Å±¾Ð£Ñ鹤¾ß£¨linter£©£¬½Ð×öshellcheck¡£Ê¹ÓÃËüÀ´Ê¹ÄúµÄshell½Å±¾¸üºÃ£¡
ÎÒÃÇ»áÏñÌÖÂÛ±à³ÌÓïÑÔÒ»ÑùÌÖÂÛbash£¬ÒòΪ£¬ÔõÃ´ËµÄØ£¬Ëü¾ÍÊÇ¡£ ÕâÆªÎÄÕµÄÄ¿±ê²»ÊÇbash±à³ÌÏê½â¡£ÎÒ²»»áÔÚbashÖÐ×ö¸´Ôӵıà³Ì£¬Ò²ÕæµÄ²»¼Æ»®Ñ§Ï°ÈçºÎÈ¥×ö¡£ µ«ÊÇ£¬¾¹ý½ñÌìµÄ˼¿¼Ö®ºó£¬ÎÒÈÏΪÃ÷È·ÕûÀíÏÂbash±à³ÌÓïÑÔµÄһЩ»ù´¡ÖªÊ¶ÊÇÓÐÓõġ£bash±à³ÌÓïÑÔÓëÎÒʹÓùýµÄÆäËû±à³ÌÓïÑÔÓÐןܴóµÄ²»Í¬¡£
ÎÒÕæµÄÔøÈÏΪÎÒÒѾ֪µÀÕâЩ¶«Î÷ÁË£¬µ«ÊÇͨ¹ýдÕâÆªÎÄÕÂÎÒÒÀ¾Éѧµ½ÁËһЩ¶«Î÷£¬Ò²ÐíÄãÒ²»áÓÐËùÊÕ»ñ¡£
±äÁ¿¸³Öµ
ÔÚbashÖбäÁ¿¸³Öµ°´ÕÕÏÂÃæµÄ·½Ê½£º
VARIABLE=2
²¢ÇÒÄã¿ÉÒÔʹÓÃ$VARIABLE£¨±äÁ¿Ãû£©À´ÒýÓñäÁ¿¡£ÐèҪעÒâµÄÊDz»ÒªÔÚ=ÔËËã·ûµÄÁ½±ß·ÅÖÿոñ·û£¬±ÈÈçVARIABLE= 2¡¢VARIABLE = 2¡¢»òÕßVARIABLE =2£¬Õâ²¢²»ÊÇÓï·¨´íÎ󣬵«Êǽ«»á×öÍêÈ«²»ÐèÒªµÄÊÂÇ飨±ÈÈçÊÔͼÔËÐÐÒ»¸öÃû×ÖΪ2µÄ³ÌÐò£¬²¢½«»·¾³±äÁ¿VARIABLEÉèÖÃΪ¿Õ×Ö·û´®£©¡£
Bash±äÁ¿²¢²»ÒªÇóÈ«²¿´óд£¬µ«ÊÇͨ³£ÊÇ´óдµÄ¡£
´ó¶àÊýÄãËùʹÓõÄbash±äÁ¿¶¼ÊÇ×Ö·û´®¡£ÔÚbashÖÐÒ²ÓÐһЩÊý×é±äÁ¿£¬µ«ÎÒ²¢²»ÊÇÍêÈ«Àí½âËüÃÇ¡£
ʹÓÃ${}ÒýÓñäÁ¿
ÓÐʱijЩ±äÁ¿£¬ÄÚÈÝΪfile.txt£¬²¢ÇÒÎÒÏëÕâÑùʹÓÃËü£º
mv $MYVAR $MYVAR__bak # wrong!
Õâ¶Î´úÂëÊÇÎÞ·¨¹¤×÷µÄ£¡Ëü»áÈ¥²éÕÒMYVAR__bak±äÁ¿£¬µ«Õâ²¢²»ÊÇÒ»¸öÕæÊµ´æÔڵıäÁ¿¡£
ΪÁ˱ÜÃâÀàËÆÎÊÌ⣬ÄãÐèÒªÖªµÀµÄ½ö½öÊÇ${MYVAR}ºÍ$MYVARÊÇÒ»»ØÊ¡£ËùÒÔÄã¿ÉÒÔÕâÑùÔËÐÐÖ¸Á
mv $MYVAR ${MYVAR}__bak # right!
È«¾Ö±äÁ¿£¬¾Ö²¿±äÁ¿ºÍ»·¾³±äÁ¿
BashÓÐ3ÖÖ±äÁ¿¡£ÎÒÒ»°ãÏÈÏëµ½£¨¿ÉÄÜÒ²ÊÇ×î³£Ó㩵ÄÊÇ»·¾³±äÁ¿¡£
linuxÉϵÄÿ¸ö½ø³Ìʵ¼ÊÉ϶¼Óл·¾³±äÁ¿£¨Äú¿ÉÒÔÔËÐÐenv²é¿´µ±Ç°ÉèÖõıäÁ¿£©£¬µ«ÔÚBashÖУ¬ËüÃǸüÒ×ÓÚ·ÃÎÊ¡£Òª²é¿´ÃûΪMYVARµÄ»·¾³±äÁ¿£¬¿ÉÒÔÔËÐÐ
echo "$MYVAR"
ÒªÉèÖû·¾³±äÁ¿£¬ÄúÐèҪʹÓÃexport¹Ø¼ü×Ö£º
export MYVAR=2
ÉèÖû·¾³±äÁ¿Ê±£¬ËùÓÐ×Ó½ø³Ì½«¿´µ½¸Ã»·¾³±äÁ¿¡£ËùÒÔÈç¹ûÄãÔËÐÐexport MYVAR=2; python test.py£¬python³ÌÐò½«MYVARÉèÖÃΪ2¡£
µÚ¶þÖÖ±äÁ¿ÊÇÈ«¾Ö±äÁ¿¡£Í¬ÑùÏñÉÏÃæÄÇÑù¸³Öµ¡£
MYVAR=2
ÔÚÆäËû±à³ÌÓïÑÔÖÐËûÃDZíÏÖµÃÏñÈ«¾Ö±äÁ¿¡£
»¹Óоֲ¿±äÁ¿£¬ËüÃǵÄ×÷ÓÃÓòÖ»ÄÜ´æÔÚÓÚbashº¯ÊýÖС£ ÎÒ»ù±¾ÉÏ´ÓÀ´Ã»ÓÐʹÓùýÕâÑùµÄº¯Êý£¨²»ÏñÎÒдµÄÆäËû±à³ÌÓïÑÔ£©£¬ÎÒ´ÓÀ´Ã»ÓÐʹÓùý¾Ö²¿±äÁ¿¡£
forÑ»·
ÒÔÏÂÊÇÎÒÔÚbashÖбàдѻ·µÄ·½·¨¡£ ´ËÑ»·½«´Ó1´òÓ¡µ½10¡£
for i in `seq 1 10` # you can use {1..10} instead of `seq 1 10`
do
echo "$i"
done
Èç¹ûÄãÏëÓÃÒ»ÐдúÂëдÕâ¸öÑ»·£¬¿ÉÒÔÕâÑùд£º
for i in `seq 1 10`; do echo $i; done
ÎÒ¾õµÃÕâÊDz»¿ÉÄܼÇסµÄ£¨ÄãÒªÔõô¼ÇסÔÚ seq 1 10 Ö®ºóÓÐÒ»¸ö·ÖºÅ£¬µ«ÊÇÔÚ do Ö®ºóȴûÓÐÁË£©£¬ËùÒÔÎÒ²»»áÈ¥¼ÇËü¡£
ÄãÒ²¿ÉÒÔдwhileÑ»·£¬µ«ÎÒ´ÓÀ´Ã»ÓÐÕâÑùд¹ý¡£
ÓиöºÜ¿áµÄÊÂÇéÊÇÄã¿ÉÒÔ±éÀúÁíÒ»¸öÃüÁîµÄÊä³ö¡£seq 1 10 ½«Êý×Ö´Ó1µ½10£¨Ã¿ÐÐÒ»¸ö£©´òÓ¡£¬Õâ¸öforÑ»·Ö»ÊÇÌáÈ¡¸ÃÊä³ö²¢±éÀúËü¡£ÎҾ;³£ÓÃÕâÖÖ·½·¨¡£
ÄúÒ²¿ÉÒÔʹÓ÷´ÒýºÅ»ò$()À´²åÈëÃüÁîµÄÊä³ö¡£
OUTPUT=`command`
# or
OUTPUT=$(command)
if Óï¾ä
ÔÚ bash ÖÐµÄ If Óï¾äÊÇÏ൱ÈÃÈËÌÖÑáÈ¥¼ÇËü¡£Äã±ØÐë·ÅÔÚÕâЩ·½À¨ºÅÖУ¬¶øÔÚ·½À¨ºÅÖ®¼ä±ØÐëÓпոñ£¬·ñÔòËü²»Æð×÷Óá£[[ ºÍ [ ·½À¨ºÅ(Ë«/µ¥) ¶¼¹¤×÷¡£ ÕâÀïÎÒÃÇÕæÕý½øÈë bash µÄÆæ¹ÖÁìÓò£º[ ÊÇÒ»¸ö³ÌÐò(/usr/bin/[)µ« [[ ÊÇ bash Óï·¨¡£[[ ¸üºÃ¡£
if [[ "vulture" = "panda" ]]; then
echo expression evaluated as true
else
echo expression evaluated as false
fi
´ËÍ⣬Äú¿ÉÒÔ¼ì²é¡°´ËÎļþ´æÔÚ¡±£¬¡°´ËĿ¼´æÔÚ¡±µÈÄÚÈÝ¡£ÀýÈ磬Äú¿ÉÒÔ¼ì²éÎļþ /tmp/awesome.txt ÊÇ·ñ´æÔÚ£¬ÈçÏ£º
If [[ -e /tmp/awesome.txt ]]; then
echo "awesome"
fi
Õâͨ³£ÊÇÓÐÓõ쬵«ÎÒ±ØÐëÿ´Î²éÕÒÓï·¨¡£
Èç¹ûÄúÏë³¢ÊÔÓÃÃüÁîÐУ¬¿ÉÒÔʹÓà test ÃüÁÀýÈç test -e /tmp/awesome.txt ¡£ Ëü³É¹¦»á·µ»Ø0£¬·ñÔò·µ»Ø´íÎó¡£
×îºóÒ»¼þÊÂÊÇΪʲô[[±È[ºÃ£ºÈç¹ûÄãʹÓÃ[[£¬ÄÇôÄã¿ÉÒÔʹÓÃ<×ö±È½Ï£¬Ëü²»»á±ä³ÉÎļþÖØ¶¨Ïò¡£
$ [ 3 < 4 ] && echo "true"
bash: 4: No such file or directory
$ [[ 3 < 4 ]] && echo "true"true
»¹ÓÐÒ»¸ö¶îÍâµÄ×îºóÒ»¼þ¹ØÓÚ if µÄÊ£ºÎÒ½ñÌìѧµ½ÊDz»ÐèҪͨ¹ý[[»òÕß[ȥʹÓà if Óï¾ä£ºÈκÎÓÐЧµÄÃüÁî¶¼»á¹¤×÷¡£ ËùÒÔÄã¿ÉÒÔÕâÑù×öif grep peanuts food-list.txt
then
echo "allergy allert!"
fi
º¯Êý²»ÊÇÄÇôÄÑ
ÔÚ bash Öж¨ÒåºÍµ÷Óú¯Êý£¨ÌرðÊÇûÓвÎÊý£©ÊǷdz£ÈÝÒ׵ġ£
my_function () {
echo "This is a function";
}
my_function #µ÷Óú¯Êý
×ÜÊÇÒýÓÃÄãµÄ±äÁ¿
ÁíÒ»¸ö bash ¼¼ÇÉ£º¾ø²»Ê¹ÓÃÒ»¸öûÓÐÒýÓõıäÁ¿¡£ ¿´¿´Õâ¸ö¿´ËƺÏÀíµÄ shell ½Å±¾£º
X="i am awesome"
Y="i are awesome"
if [ $X = $Y ]; thenecho awesome
fi
Èç¹ûÄã³¢ÊÔÔËÐÐÕâ¸ö½Å±¾£¬Äã»áµÃµ½²»¿ÉÀíÓ÷µÄ´íÎóÏûÏ¢ script.sh: line 3: [: too many arguments. ʲô£¿Bash ½âÊÍÕâ¸ö if Óï¾äΪ if [ i am awesome == i are awesome]£¬ÕâÊÇ6¸ö×Ö·û´® (i, am, awesome, i, are, awesome) ÎÞÒâÒåµÄ if Óï¾ä¡£ ÕýÈ·µÄд·¨ÊÇ
X="i am awesome"
Y="i are awesome"
if [ "$X" = "$Y" ]; then #ÎÒ·ÅÖÃÒýºÅÒòΪÎÒÖªµÀbash»á±³ÅÑÎÒ£¬Èç¹ûÎÒ²»·ÅµÄ»°echo awesome
fi
ÓÐЩÇé¿öÏ£¬Ö»ÒªÊ¹Óà $ X ¶ø²»ÊÇ ¡°$ X¡± ¾Í¿ÉÒÔ£¬µ«ÊÇÄú¿ÉÒÔÖªµÀºÎʱ¿ÉÒÔ£¬ºÎʱ²»ÐÐÂ𣿠Îҿ϶¨²»ÄÜ¡£ ×ÜÊÇÒýÓÃÄãµÄ bash ±äÁ¿£¬Äã»á¸ü¿ìÀֵġ£
·µ»Ø´úÂë, &&, ºÍ `||
ÿ¸ö Unix ³ÌÐò¶¼ÓÐÒ»¸ö¡°·µ»Ø´úÂ롱£¬ËüÊÇÒ»¸ö´Ó0µ½127µÄÕûÊý¡£0±íʾ³É¹¦£¬ÆäËû¶¼Òâζ×Åʧ°Ü¡£ ÕâÔÚ bash ÖÐÊÇÓÐ×÷Óõģ¬ÒòΪ£ºÓÐʱÎÒ´ÓÃüÁîÐÐÔËÐÐÒ»¸ö³ÌÐò£¬²¢Ï£Íû½öÔÚµÚÒ»¸ö³ÌÐò³É¹¦µÄÇé¿öÏÂÔËÐеڶþ¸ö³ÌÐò¡£
Äã¿ÉÒÔÓà && ʵÏÖ£¡
ÀýÈ磺create_user && make_home_directory¡£ Õ⽫ÔËÐÐ create_user £¬¼ì²é·µ»Ø´úÂ룬Ȼºó½öÔÚ·µ»Ø´úÂëΪ0ʱÔËÐÐ make_home_directory¡£
ÕâÓë create_user; make_home_directory ²»Í¬£¬ÎÞÂÛ create_user µÄ·µ»Ø´úÂëÊÇʲô£¬¶¼½«ÔËÐÐ make_home_directory¡£
ÄãÒ²¿ÉÒÔʹÓÃcreate_user || make_home_directory£¬Ö»ÓÐcreate_userÔËÐÐʧ°Ü²ÅÔËÐÐmake_home_directory ¡£ ÕâÔÚ¼¼ÊõÁìÓòÖзdz£ÇÉÃî¡£
ºǫ́½ø³Ì
ÎÒ²»»áÔÚ´Ë̸¼°Ì«¶à¹ØÓÚ job ¿ØÖƵÄÄÚÈÝ£¬µ«ÊÇ£ºÄã¿ÉÒÔÏñÏÂÃæÕâÑùÆô¶¯ºǫ́½ø³Ì
long_running_command &
Èç¹ûÄãºóÀ´ºó»Ú½«½ø³Ì·Åµ½ºǫ́£¬²¢Ï£Íû°ÑËü´øµ÷»ØÇ°Ì¨£¬Äã¿ÉÒÔÓà fg À´×öµ½ÕâÒ»µã¡£ Èç¹û²»Ö¹Ò»¸ö½ø³Ì£¬Äú¿ÉÒÔʹÓà jobs ²é¿´ËùÓкǫ́½ø³Ì¡£ÓÉÓÚijÖÖÔÒò£¬fg ÐèÒªÒ»¸ö ¡°job ID¡±£¨Õâ¾ÍÊÇ jobs ´òÓ¡Êä³öµÄ£©¶ø²»ÊÇÒ»¸ö PID¡£ ËÖªµÀ Bash ΪʲôÕâÑù×ÓÄØ¡£
ÁíÍ⣬Èç¹ûÄãÔÚºǫ́ÔËÐÐÌ«¶àµÄ½ø³Ì£¬ÄÚÖõȴýÃüÁµÈµ½ËüÃǶ¼·µ»Ø¡£
˵µ½ºó»Ú - Èç¹ûÄ㲻СÐÄÔÚ´íÎóµÄÖÕ¶ËÆô¶¯Ò»¸ö½ø³Ì£¬Nelson Elhage ÓÐÒ»¸öºÜ°ôµÄÏîÄ¿½Ð×ö reptyr £¬¿ÉÒÔ±£´æÄãµÄ½ø³Ì²¢½«ÆäÒÆµ½ÆÁÄ»»á»°»òÕßijЩÆäËû¶«Î÷ÖС£
°²È«Ñ¡Ïî: set -e
µ±ÎÒ±àд³ÌÐòʱ£¬Í¨³£Îһ᷸´íÎó¡£ ÔÚÎÒʹÓõĴó¶àÊý±à³ÌÓïÑÔÖУ¬µ±ÓÐЩ³ÌÐò·¢Éú¿ÉŵĴíÎóʱ£¬³ÌÐò½«Í˳ö²¢¸æËßÎÒ³öÁËʲôÎÊÌâ¡£
ÔÚ bash ½Å±¾ÖУ¬Äãͨ³£ÔËÐкܶà³ÌÐò¡£ ÓÐʱÕâЩ³ÌÐò½«ÔÚÍ˳öÊÇ·µ»ØÒ»¸ö±íʾʧ°ÜµÄ·µ»ØÂë¡£ ĬÈÏÇé¿öÏ£¬µ±³ÌÐòʧ°Üʱ£¬Bash ½«¼ÌÐøÔËÐС£
ÀýÈ磬ÔÚÕâ¸ö½Å±¾ÖУ¬Python ½«Ê§°Ü£¨ÒòΪÎÒÕýÔÚ³¢ÊÔÔËÐеÄÎļþ²»´æÔÚ£©£¬È»ºóËü»áÓä¿ìµØ¼ÌÐøÖ´Ðв¢´òÓ¡ ¡°done¡±¡£
python non_existant_file.py
echo "done"
Õ⼸ºõ²»ÊÇÎÒÏëÒªµÄ - Èç¹ûÎҵĽű¾ÖеÄÒ»¸ö³ÌÐòʧ°Ü£¬ÎÒ²»Ï£ÍûËü¼ÌÐøÖ´ÐУ¬×öһЩ¿ÉÄÜÊÇ䶨Òå/¿ÉÒɵÄÊÂÇ飡 ÕâÌ«¿ÉÅÂÁË¡£set -e ½«Ê¹½Å±¾Í£Ö¹£¬²¢×èÖ¹ÈκÎDZÔÚµÄÆÆ»µ¡£ÏÂÃæÊǸü°²È«µÄ°æ±¾£º
set -e # put this at the beginning of your file
python non_existant_file.py
echo "done"
¸ü°²È«µÄÑ¡Ïî: use set -u
ÔÚ´ó¶àÊýÎÒËùʹÓõıà³ÌÓïÑÔÖУ¬Èç¹ûÎÒ³¢ÊÔʹÓÃδÉèÖõıäÁ¿ÎÒ»áµÃµ½Ò»¸ö´íÎó¡£ÕâÔÚ Bash Öв¢²»ÊÊÓã¡Ä¬Èϵģ¬Î´ÉèÖõıäÁ¿»á±»ÆÀ¹ÀΪ¿Õ×Ö·û´®¡£ÏÂÃæ´úÂëµÄ½á¹û£º
rm -rf "$DIRECTORY/*"
ÔÚ $DIRECTORY δÉèÖõÄÇé¿öÏ£¬Êµ¼ÊÉÏ»áÔËÐÐ rm -rf /* ¡£Èç¹ûÄãʹÓà set -u Ñ¡Ï bash »áÔÚÄã³¢ÊÔʹÓÃδÉèÖñäÁ¿Ê±ÖÕÖ¹ÔËÐв¢·µ»ØÊ§°Ü¡£
µ÷ÊÔÑ¡Ïî: use set -x
set -x ½«»áʹµÃ bash ÔÚʵ¼ÊÔËÐÐÃüÁî֮ǰ´òÓ¡³öÿ¸ö´ýÖ´ÐеÄÃüÁî¡£Õâ¶Ôµ÷ÊÔÕæµÄºÜÓÐÓá£
Äã¿ÉÒÔͨ¹ý set -o Ñ¡Ïî²é¿´ËùÓÐÆäËûµÄ bash Ñ¡Ïî¡£
ÎÒËù¼ûµ½µÄÈËÃÇÔÚʵ¼ùÖÐËùʹÓõĴóÁ¿ shell ½Å±¾¶¼ÒÔ set -eu »òÕß set -eux ´òÍ·¡£Ò»ÇÐΪÁ˰²È«ÐÔ£¡
Èç¹û pipe µÄ²¿·Öʧ°ÜÁË£¬ÄãÒ²¿ÉÒÔʹÓà set -o pipefail À´Í˳ö¡£
ʹÓà shellcheck ¼ì²éÄãµÄ bash ½Å±¾!
×î½üÎÒµÃÖªÓÐÒ»¸ö bash linter ¿ÉÒÔ°ïÖú¼ì²âËùÓÐÕâЩ¹ÖÒìµÄ©¶´¼°ºÍ¸ü¶à£¨Ç±ÔÚµÄ bug £©£¡ Ëü±»³ÆÎª shellcheck£¬Äã¿ÉÒÔʹÓà apt-get install shellcheck ÃüÁî½øÐа²×°¡£
Ëü»¹ÓÐÒ»¸öÍøÕ¾£¡ https://www.shellcheck.net/¡£ ÕâÀïÓÐÒ»¸öÀý×Ó£¬Äã¿ÉÒÔ´ÓÖвéÕÒËüËù¸ø³öµÄ´íÎóÂëµÄÏêϸÐÅÏ¢¡£ÕâÕæµÄºÜ°ô£¬ÎÒºÜÀÖÒâ³¢ÊÔ¡£
Shellcheck ÄÜ×öµÄ±ÈÎÒÖªµÀµÄ bash ½Å±¾×î¼Ñ×ö·¨Òª¶àµÃ¶à:)¡£µ±ÎÒ¿´µ½ÄÇЩÀàËÆÎÒдµÄÄÄЩÀý×Óʱ£¬¡°ÍÛ£¬ÕâÕæÊÇÓеÀÀíµÄ£¬µ«ÎÒ´ÓÀ´Ã»ÓÐÕâÑùÏë¹ý¡±¡£
Ò²ÓÐÒ»¸ö shell ¸ñʽ»¯¹¤¾ß£¬Ãû×ÖÊÇ shfmt £¬Ã²ËƺÜÓÐÓãºhttps://github.com/mvdan/sh.
bash ÊǹÖÒìµÄ£¬µ«¿ÉÒÔ¼ÇסÆäÖÐһЩ¹Öñ±
ÎÒÈÏΪÕâЩ¶¼ÊÇÎÒËùÖªµÀµÄ»ù±¾µÄ bash ¹Öñ±£¡ÎÒÏëÕâ¿ÉÄÜÊǹØÓÚ bash ÊÇÒ»¸öÄã²»Ó¦¸ÃʹÓõĿÉŵıà³ÌÓïÑÔµÄÅúÆÀ£¬ÒÔ¼°ÎªÊ²Ã´ÎÒÃÇûÓÐÒ»¸ö¸ü²»ÈÝÒ×»ìÏýµÄ shell ±à³ÌÓïÑÔ£¬µ«Õâ²¢²»»á´ø¸øÎÒ¶àÉÙÂé·³¡£
ÎÒÖ»ÊÇÊÔͼ²»Ð´·Ç³£¸´Ô bash ½Å±¾£¬¼á³ÖÕâÀïµÄһЩ×î¼Ñʵ¼ù£¬¶ø²»±Øµ£ÐÄÌ«¶à¡£ÎÞÂÛÈçºÎ£¬Á˽âÕâÐ©Ææ¹ÖµÄ¹Öñ±ÊǷdz£ÓÐȤµÄ£¡
Èç¹ûÄãϲ»¶ÕâЩ£¬ÄÇôÈËÃǸøÎÒÒ»´ó¶ÑÆäËûµÄ bash ×ÊÔ´£¬ÎÒÏÖÔھͺÍÄã·ÖÏíһϣº
defensive bash programming ·ÀÓùÐÔ bash ±à³Ì
À´×Ô Google µÄ shell scripting style guide£¨shell ½Å±¾±àÂë·ç¸ñÖ¸ÄÏ£©¡£
TLDP µÄ advanced bash programming guide£¨¸ß¼¶ bash ±à³ÌÖ¸ÄÏ£©
Õâ¸ö bash Ö¸ÄϺÍÀ©Õ¹ bash FAQ
Ò»¸ö²âÊÔÄã bash ˮƽµÄÃüÁîÐÐÌôÕ½ÓÎÏ·
ÔٴΣ¬shellcheck ºÍ shfmt
£¨Èç¹ûÎÒÃÇ̸¼° shell µÄÌæ´úÎÄÇôÎÒʵ¼ÊÉÏÿÌìʹÓÃµÄ shell ÊÇ Fish£¬ËüÊÇÍêÃÀµÄ¡£ÎÒϲ»¶ Fish£¬ÊÇÒòΪËüÓÅÒìµÄ´úÂë×Ô¶¯Íê³É¹¦ÄÜ£¬µ«ÎÒÒÀȻѡÔñÓà bash ±àд shell ½Å±¾¡£
¸Ðл Mat¡¢Marina¡¢Kamal¡¢Geoffrey¡¢Panashe¡¢@gnomon¡¢ºÍ Iain£¬ËûÃǺÍÎÒÒ»Æð̽ÌÖ Bash£¡
»¶Ó¼ÓÈë±¾Õ¾¹«¿ªÐËȤȺ
Èí¼þ¿ª·¢¼¼ÊõȺ
ÐËȤ·¶Î§°üÀ¨£ºJava£¬C/C++£¬Python£php£¬Ruby£¬shellµÈ¸÷ÖÖÓïÑÔ¿ª·¢¾Ñé½»Á÷£¬¸÷ÖÖ¿ò¼ÜʹÓã¬Íâ°üÏîÄ¿»ú»á£¬Ñ§Ï°¡¢Åàѵ¡¢Ìø²ÛµÈ½»Á÷
QQȺ£º204132433
HadoopÔ´´úÂëÑо¿Èº
ÐËȤ·¶Î§°üÀ¨£ºHadoopÔ´´úÂë½â¶Á£¬¸Ä½ø£¬ÓÅ»¯£¬·Ö²¼Ê½ÏµÍ³³¡¾°¶¨ÖÆ£¬ÓëHadoopÓйصĸ÷ÖÖ¿ªÔ´ÏîÄ¿£¬×ÜÖ®¾ÍÊÇÍæ×ªHadoop
QQȺ£º204050420
±¾ÎıêÌ⣺±àд¿ìËÙ°²È« Bash ½Å±¾µÄ½¨ÒéLinux
±¾Õ¾Á´½Ó£ºhttp://www.codesec.net/view/551495.html
·ÖÏíÇëµã»÷£º
1.·²CodeSecTeam×ªÔØµÄÎÄÕÂ,¾ù³ö×ÔÆäËüýÌå»òÆäËû¹ÙÍø½éÉÜ,Ä¿µÄÔÚÓÚ´«µÝ¸ü¶àµÄÐÅÏ¢,²¢²»´ú±í±¾Õ¾ÔÞͬÆä¹ÛµãºÍÆäÕæÊµÐÔ¸ºÔð£»
2.×ªÔØµÄÎÄÕ½ö´ú±íÔ´´×÷Õß¹Ûµã,Óë±¾Õ¾Î޹ء£ÆäÔ´´ÐÔÒÔ¼°ÎÄÖгÂÊöÎÄ×ÖºÍÄÚÈÝδ¾±¾Õ¾Ö¤Êµ,±¾Õ¾¶Ô¸ÃÎÄÒÔ¼°ÆäÖÐÈ«²¿»òÕß²¿·ÖÄÚÈÝ¡¢ÎÄ×ÖµÄÕæÊµÐÔ¡¢ÍêÕûÐÔ¡¢¼°Ê±ÐÔ£¬²»×÷³öÈκα£Ö¤»ò³ÐÈô£»
3.Èç±¾Õ¾×ªÔØ¸åÉæ¼°°æÈ¨µÈÎÊÌâ,Çë×÷Õß¼°Ê±ÁªÏµ±¾Õ¾,ÎÒÃǻἰʱ´¦Àí¡£