δ¼ÓÐDZê

±àд¿ìËÙ°²È« Bash ½Å±¾µÄ½¨ÒéLinux

×ÖÌå´óС ´ó | ÖÐ | С
[´óÊý¾Ý¼¼Êõ ËùÊô·ÖÀà ´óÊý¾Ý¼¼Êõ | ·¢²¼Õß µêС¶þ04 | ʱ¼ä | ×÷Õß ºìÁì½í ] 0ÈËÊղصã»÷ÊÕ²Ø

±àд¿ìËÙ°²È« Bash ½Å±¾µÄ½¨ÒéLinux
tm
±àд¿ìËÙ°²È« Bash ½Å±¾µÄ½¨ÒéLinux
»ù´¡
±àд¿ìËÙ°²È« Bash ½Å±¾µÄ½¨ÒéLinux
°²È«
±àд¿ìËÙ°²È« Bash ½Å±¾µÄ½¨ÒéLinux
±à³Ì
±àд¿ìËÙ°²È« Bash ½Å±¾µÄ½¨ÒéLinux
Bash
±àд¿ìËÙ°²È« Bash ½Å±¾µÄ½¨ÒéLinux
±à³ÌÓïÑÔ

×òÌìÎÒºÍһЩÅóÓÑÁÄÆð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 ]; then

echo 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

Ö÷Ìâ: Linux¡¢RIA¡¢Hadoop¡¢±äÁ¿¡¢Java¡¢C++¡¢Ruby¡¢¿ªÔ´¡¢PHP¡¢UT¡¢
tags: bash,#160,±äÁ¿,shell,MYVAR,awesome,Bash,±à³Ì,set,echo,amp,½Å±¾,ÔËÐÐ
·ÖÒ³£º12
×ªÔØÇë×¢Ã÷
±¾ÎıêÌ⣺±àд¿ìËÙ°²È« Bash ½Å±¾µÄ½¨ÒéLinux
±¾Õ¾Á´½Ó£ºhttp://www.codesec.net/view/551495.html
·ÖÏíÇëµã»÷£º


1.·²CodeSecTeam×ªÔØµÄÎÄÕÂ,¾ù³ö×ÔÆäËüýÌå»òÆäËû¹ÙÍø½éÉÜ,Ä¿µÄÔÚÓÚ´«µÝ¸ü¶àµÄÐÅÏ¢,²¢²»´ú±í±¾Õ¾ÔÞͬÆä¹ÛµãºÍÆäÕæÊµÐÔ¸ºÔð£»
2.×ªÔØµÄÎÄÕ½ö´ú±íÔ­´´×÷Õß¹Ûµã,Óë±¾Õ¾Î޹ء£ÆäÔ­´´ÐÔÒÔ¼°ÎÄÖгÂÊöÎÄ×ÖºÍÄÚÈÝδ¾­±¾Õ¾Ö¤Êµ,±¾Õ¾¶Ô¸ÃÎÄÒÔ¼°ÆäÖÐÈ«²¿»òÕß²¿·ÖÄÚÈÝ¡¢ÎÄ×ÖµÄÕæÊµÐÔ¡¢ÍêÕûÐÔ¡¢¼°Ê±ÐÔ£¬²»×÷³öÈκα£Ö¤»ò³ÐÈô£»
3.Èç±¾Õ¾×ªÔØ¸åÉæ¼°°æÈ¨µÈÎÊÌâ,Çë×÷Õß¼°Ê±ÁªÏµ±¾Õ¾,ÎÒÃǻἰʱ´¦Àí¡£
µÇ¼ºó¿ÉÓµÓÐÊÕ²ØÎÄÕ¡¢¹Ø×¢×÷ÕßµÈȨÏÞ...
¼¼Êõ´óÀà ¼¼Êõ´óÀà | ´óÊý¾Ý¼¼Êõ | ÆÀÂÛ(0) | ÔĶÁ(108)