{"id":576,"date":"2015-11-07T19:35:01","date_gmt":"2015-11-08T04:35:01","guid":{"rendered":"\/blog\/?p=576"},"modified":"2025-12-09T14:57:15","modified_gmt":"2025-12-09T05:57:15","slug":"unix-shell-programming","status":"publish","type":"post","link":"https:\/\/hasu0707.duckdns.org\/blog\/?p=576","title":{"rendered":"UNIX Shell Programming"},"content":{"rendered":"\n<pre class=\"wp-block-preformatted\">#############################<br># \uc624\ub958 \ubc1c\uc0dd \uc2dc \uc2a4\ud06c\ub9bd\ud2b8 \uc2e4\ud589<br># \uc911\uc9c0 \ub610\ub294 \ubb34\uc2dc\ud558\uace0 \uc9c4\ud589<br>#############################<br>set -e<br>set +e<br><br>#############################<br># \ubcc0\uc218 \uc0ac\uc6a9 \ubc29\ubc95 (Variable)<br>#############################<br>\u25a3 \uc704\uce58 \ub9e4\uac1c \ubcc0\uc218(Positional Parameters)<br>$0 : \uc2e4\ud589\ub41c \uc2a4\ud06c\ub9bd\ud2b8 \uc774\ub984<br>$1 : $1 $2 $3...${10}\uc778\uc790 \uc21c\uc11c\ub300\ub85c \ubc88\ud638\uac00 \ubd80\uc5ec\ub41c\ub2e4. 10\ubc88\uc9f8\ubd80\ud130\ub294 \"{}\"\uac10\uc2f8\uc918\uc57c \ud568<br>$* : \uc804\uccb4 \uc778\uc790 \uac12<br>$@ : \uc804\uccb4 \uc778\uc790 \uac12($* \ub3d9\uc77c\ud558\uc9c0\ub9cc \uc30d\ub530\uc634\ud45c\ub85c \ubcc0\uc218\ub97c \uac10\uc2f8\uba74 \ub2e4\ub978 \uacb0\uacfc \ub098\uc634)<br>$# : \ub9e4\uac1c \ubcc0\uc218\uc758 \ucd1d \uac1c\uc218<br><br>\u25a3 \ud2b9\uc218 \ub9e4\uac1c \ubcc0\uc218(Special Parameters)<br>$$ : \ud604\uc7ac \uc2a4\ud06c\ub9bd\ud2b8\uc758 PID<br>$? : \ucd5c\uadfc\uc5d0 \uc2e4\ud589\ub41c \uba85\ub839\uc5b4, \ud568\uc218, \uc2a4\ud06c\ub9bd\ud2b8 \uc790\uc2dd\uc758 \uc885\ub8cc \uc0c1\ud0dc<br>$! : \ucd5c\uadfc\uc5d0 \uc2e4\ud589\ud55c \ubc31\uadf8\ub77c\uc6b4\ub4dc(\ube44\ub3d9\uae30) \uba85\ub839\uc758 PID<br>$- : \ud604\uc7ac \uc635\uc158 \ud50c\ub798\uadf8<br>$_ : \uc9c0\ub09c \uba85\ub839\uc758 \ub9c8\uc9c0\ub9c9 \uc778\uc790\ub85c \uc124\uc815\ub41c \ud2b9\uc218 \ubcc0\uc218<br><br>\u25a3 \ub9e4\uac1c \ubcc0\uc218 \ud655\uc7a5(Parameter Expansion)<br>${\ubcc0\uc218} : $\ubcc0\uc218\uc640 \ub3d9\uc77c\ud558\uc9c0\ub9cc {} \uc0ac\uc6a9\ud574\uc57c\ub9cc \ub3d9\uc791\ud558\ub294 \uac83\ub4e4\uc774 \uc788\uc74c(\uc608: echo ${string})<br>${\ubcc0\uc218:\uc704\uce58} : \uc704\uce58 \ub2e4\uc74c\ubd80\ud130 \ubb38\uc790\uc5f4 \ucd94\ucd9c(\uc608: echo ${string:4})<br>${\ubcc0\uc218:\uc704\uce58:\uae38\uc774} : \uc704\uce58 \ub2e4\uc74c\ubd80\ud130 \uc9c0\uc815\ud55c \uae38\uc774 \ub9cc\ud07c\uc758 \ubb38\uc790\uc5f4 \ucd94\ucd9c(\uc608: echo ${string:4:3})<br>${\ubcc0\uc218:-\ub2e8\uc5b4} : \ubcc0\uc218 \ubbf8\uc120\uc5b8 \ud639\uc740 NULL\uc77c\ub54c \uae30\ubcf8\uac12 \uc9c0\uc815, \uc704\uce58 \ub9e4\uac1c \ubcc0\uc218\ub294 \uc0ac\uc6a9 \ubd88\uac00(\uc608: echo ${string:-HELLO})<br>${\ubcc0\uc218-\ub2e8\uc5b4}  : \ubcc0\uc218 \ubbf8\uc120\uc5b8\uc2dc\ub9cc \uae30\ubcf8\uac12 \uc9c0\uc815, \uc704\uce58 \ub9e4\uac1c \ubcc0\uc218\ub294 \uc0ac\uc6a9 \ubd88\uac00(\uc608: echo ${string-HELLO})<br>${\ubcc0\uc218:=\ub2e8\uc5b4} : \ubcc0\uc218 \ubbf8\uc120\uc5b8 \ud639\uc740 NULL\uc77c\ub54c \uae30\ubcf8\uac12 \uc9c0\uc815, \uc704\uce58 \ub9e4\uac1c \ubcc0\uc218 \uc0ac\uc6a9 \uac00\ub2a5(\uc608: echo ${string:=HELLO})<br>${\ubcc0\uc218=\ub2e8\uc5b4}  : \ubcc0\uc218 \ubbf8\uc120\uc5b8\uc2dc\ub9cc \uae30\ubcf8\uac12 \uc9c0\uc815, \uc704\uce58 \ub9e4\uac1c \ubcc0\uc218 \uc0ac\uc6a9 \uac00\ub2a5(\uc608: echo ${string=HELLO})<br>${\ubcc0\uc218:?\ub2e8\uc5b4} : \ubcc0\uc218 \ubbf8\uc120\uc5b8 \ud639\uc740 NULL\uc77c\ub54c \ub2e8\uc5b4 \ucd9c\ub825 \ud6c4 \uc2a4\ud06c\ub9bd\ud2b8 \uc885\ub8cc,(\uc608: echo ${string:?HELLO})<br>${\ubcc0\uc218?\ub2e8\uc5b4}  : \ubcc0\uc218 \ubbf8\uc120\uc5b8\uc2dc\ub9cc \ub2e8\uc5b4 \ucd9c\ub825 \ud6c4 \uc2a4\ud06c\ub9bd\ud2b8 \uc885\ub8cc(\uc608: echo ${string?HELLO})<br>${\ubcc0\uc218:+\ub2e8\uc5b4} : \ubcc0\uc218 \uc120\uc5b8\uc2dc\ub9cc \ub2e8\uc5b4 \uc0ac\uc6a9(\uc608: echo ${string:+HELLO})<br>${\ubcc0\uc218+\ub2e8\uc5b4}  : \ubcc0\uc218 \uc120\uc5b8 \ud639\uc740 NULL\uc77c\ub54c \ub2e8\uc5b4 \uc0ac\uc6a9(\uc608: echo ${string+HELLO})<br>${#\ubcc0\uc218}      : \ubb38\uc790\uc5f4 \uae38\uc774(\uc608: echo ${#string})<br>${\ubcc0\uc218#\ub2e8\uc5b4}  : \ubcc0\uc218\uc758 \uc55e\ubd80\ubd84\ubd80\ud130 \uc9e7\uac8c \uc77c\uce58\ud55c \ub2e8\uc5b4 \uc0ad\uc81c(\uc608: echo ${string#a*b})<br>${\ubcc0\uc218##\ub2e8\uc5b4} : \ubcc0\uc218\uc758 \uc55e\ubd80\ubd84\ubd80\ud130 \uae38\uac8c \uc77c\uce58\ud55c \ub2e8\uc5b4 \uc0ad\uc81c(\uc608: echo ${string##a*b})<br>${\ubcc0\uc218%\ub2e8\uc5b4}  : \ubcc0\uc218\uc758 \ub4b7\ubd80\ubd84\ubd80\ud130 \uc9e7\uac8c \uc77c\uce58\ud55c \ub2e8\uc5b4 \uc0ad\uc81c(\uc608: echo ${string%b*c})<br>${\ubcc0\uc218%%\ub2e8\uc5b4} : \ubcc0\uc218\uc758 \ub4b7\ubd80\ubd84\ubd80\ud130 \uae38\uac8c \uc77c\uce58\ud55c \ub2e8\uc5b4 \uc0ad\uc81c(\uc608: echo ${string%%b*c})<br>${\ubcc0\uc218\/\ucc3e\ub294\ub2e8\uc5b4\/\ubcc0\uacbd\ub2e8\uc5b4}  : \ucc98\uc74c \uc77c\uce58\ud55c \ub2e8\uc5b4\ub97c \ubcc0\uacbd(\uc608: echo ${string\/abc\/HELLO})<br>${\ubcc0\uc218\/\/\ucc3e\ub294\ub2e8\uc5b4\/\ubcc0\uacbd\ub2e8\uc5b4} : \uc77c\uce58\ud558\ub294 \ubaa8\ub4e0 \ub2e8\uc5b4\ub97c \ubcc0\uacbd(\uc608: echo ${string\/\/abc\/HELLO})<br>${\ubcc0\uc218\/#\ucc3e\ub294\ub2e8\uc5b4\/\ubcc0\uacbd\ub2e8\uc5b4} : \uc55e\ubd80\ubd84\uc774 \uc77c\uce58\ud558\uba74 \ubcc0\uacbd(\uc608: echo ${string\/#abc\/HELLO})<br>${\ubcc0\uc218\/%\ucc3e\ub294\ub2e8\uc5b4\/\ubcc0\uacbd\ub2e8\uc5b4} : \ub4b7\ubd80\ubd84\uc774 \uc77c\uce58\ud558\uba74 \ubcc0\uacbd(\uc608: echo ${string\/%abc\/HELLO})<br>${!\ub2e8\uc5b4*}, ${!\ub2e8\uc5b4@} : \uc120\uc5b8\ub41c \ubcc0\uc218\uc911\uc5d0\uc11c \ub2e8\uc5b4\uac00 \ud3ec\ud568\ub41c \ubcc0\uc218 \uba85 \ucd94\ucd9c(\uc608: echo ${!string*}, echo ${!string@})<br><br>#############################<br># \uc778\uc218 \ucc98\ub9ac<br># \uc778\uc218\uac00 2\uac1c \ubbf8\ub9cc\uc774\uba74 \uc624\ub958 \ucc98\ub9ac<br>##############################<br>if [ $# -ne 2 ]; then<br>  echo \"Usage: $0 &lt;param1> &lt;param2>\"<br>  exit -1<br>else<br>  echo \"param1: $1\"<br>  echo \"param2: $2\"<br>fi<br><br>#############################<br># \ud14d\uc2a4\ud2b8 \ud30c\uc77c\uc5d0\uc11c<br># \uc911\ubcf5\ub41c \uc904\ub9cc \ucc3e\uae30<br>#############################<br>sort mapping.txt | uniq -d<br><br>#############################<br># \ubcc0\uc218 \ub0b4\uc5d0 \ubb38\uc790\uc5f4 \uc874\uc7ac \uccb4\ud06c<br>#############################<br>AA=\"sftp,telnet\"<br><br>if [[ \"${AA}\" = *\"tel\"* ]]; then<br> echo found.<br>fi<br><br>#############################<br># \uc9c8\ubb38<br>#############################<br>while true; do<br>  echo<br>  read -p \"\uc774 \uc791\uc5c5\uc744 \uc815\ub9d0 \uc9c4\ud589\ud558\uc2dc\uaca0\uc2b5\ub2c8\uae4c? (y\/n) \" YN_ANSWER<br>    case ${YN_ANSWER} in<br>      [Yy]* ) break;;<br>      [Nn]* ) exit 1;;<br>      * ) echo \"Please answer y or n.\";;<br>  esac<br>done<br><br>#############################<br># \uc2a4\ud06c\ub9bd\ud2b8\uc5d0\uc11c \uc124\uc815\ud30c\uc77c \uc77d\uae30<br>#############################<br>THIS_IS_CONFIG_FILE=\".\/init.conf\"<br>echo \"###########################################################\"<br>echo \"# Read the ${THIS_IS_CONFIG_FILE} file...\"<br>echo \"###########################################################\"<br>if [ -f ${THIS_IS_CONFIG_FILE} ]; then<br>  source ${THIS_IS_CONFIG_FILE}<br>else<br>  echo \"${THIS_IS_CONFIG_FILE} can't be read.\"<br>  exit 1<br>fi<br><br>echo ${TIMESTAMP_STR}<br>----------------------------------<br>\u25a3\u25a3\u25a3 init.conf \u25a3\u25a3\u25a3<br>TIMESTAMP_STR=`date \"+%Y%m%d_%H%M%S\"`<br>CURRENT_DIR=`pwd -P`<br><br>#############################<br># PAUSE<br>#############################<br>read -p \"Press any key to continue...\"<br>read -t 5 -p \"I am going to wait for 5 seconds only...\"<br><br>#############################<br># \uba85\ub839\uc5b4 \uc2e4\ud589 \uc131\uacf5\uc5ec\ubd80 \ud655\uc778<br>#############################<br>grep \"${USER_ID}\" \/etc\/sudoers<br>if [ $? -eq 0 ];<br>then<br>  echo \"\ubb38\uc790\uc5f4\uc774 \uc874\uc7ac \ud569\ub2c8\ub2e4.\"<br>else<br>  echo \"\ubb38\uc790\uc5f4\uc774 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.\"<br>fi<br><br>#############################<br># \ud30c\uc77c\uba85\uc744 \uc815\ub82c\ud558\uc5ec<br># \ucd5c\uc2e0 \ud30c\uc77c\uc758 \ud30c\uc77c\uba85 \ucd94\ucd9c<br>#############################<br>TMP_FILENAME1=`ls -1 -t \/backup\/*_backup.tar.gz | head -1`<br>FILENAME_TAR_GZ=`basename ${TMP_FILENAME1}`<br><br>#############################<br># \ubb38\uc790\uc5f4 \ubd84\ub9ac \ubc0f \ud30c\uc2f1<br>#############################<br>#!\/bin\/bash<br>TEXT_FILE=\"1.txt\"<br><br>#-----------------------------------------------<br># \ubb38\uc790\uc5f4\uc774 \ud3ec\ud568\ub418\uc5c8\ub294\uc9c0 \ud655\uc778 (\uc788\uc73c\uba741, \uc5c6\uc73c\uba740)<br>#-----------------------------------------------<br>func_strstr() {<br>  [ \"${1#*$2*}\" = \"$1\" ] &amp;&amp; return 0<br>  return 1<br>}<br><br>while read READ_STRING<br>do<br>  #---------------------------------------------<br>  # ;\uc744 \ubd84\ub9ac\uc790\ub85c \ud1a0\ud070 \ubd84\ub9ac<br>  #---------------------------------------------<br>  TOKENARR1=(${READ_STRING\/\/;\/ })<br><br>  TOKEN0=${TOKENARR1[0]}<br>  TOKEN1=${TOKENARR1[1]}<br>  TOKEN2=${TOKENARR1[2]}<br><br>  if [ ${TOKEN0} == \"-\" ]<br>  then<br>    TOKEN0=${OLD_TOKEN0}<br>  fi<br>  if [ ${TOKEN1} == \"-\" ]<br>  then<br>    TOKEN1=${OLD_TOKEN1}<br>  fi<br><br>  #---------------------------------------------<br>  # TOKEN2\uc5d0 ,\uac00 \ud3ec\ud568\ub418\uc5b4 \uc788\uc73c\uba74 \ub2e4\uc2dc \ud1a0\ud070 \ubd84\ub9ac<br>  # \ud6c4 \ucc98\ub9ac<br>  #---------------------------------------------<br>  func_strstr ${TOKEN2} \",\"<br>  if [ $? -eq 1 ];<br>  then<br>    TOKENARR2=(${TOKEN2\/\/,\/ })<br><br>    COUNT2=0<br>    while [ ! -z ${TOKENARR2[${COUNT2}]} ]<br>    do<br>      echo \"COMMA: ${TOKEN0} ; ${TOKEN1} ; ${TOKENARR2[${COUNT2}]}\"<br>      COUNT2=$(($COUNT2+1))<br>    done<br>  else<br>    echo \"${TOKEN0} ; ${TOKEN1} ; ${TOKEN2}\"<br>  fi<br><br>  OLD_TOKEN0=${TOKEN0}<br>  OLD_TOKEN1=${TOKEN1}<br>done &lt; ${TEXT_FILE}<br><br>#############################<br># \ubc30\uc5f4 \uc0ac\uc6a9 \uc608\uc81c (1\ucc28\uc6d0 \ubc30\uc5f4\ub9cc \uc9c0\uc6d0)<br>#############################<br># \ubc30\uc5f4 \ubcc0\uc218 \uc0ac\uc6a9\uc740 \ubc18\ub4dc\uc2dc \uad04\ud638\ub97c \uc0ac\uc6a9\ud574\uc57c \ud55c\ub2e4.(\uc608: ${array[1]})<br># \ubc30\uc5f4\uc758 \ud06c\uae30 \uc9c0\uc815\uc5c6\uc774 \ubc30\uc5f4 \ubcc0\uc218\ub85c \uc120\uc5b8<br># \ucc38\uace0: 'declare -a' \uba85\ub839\uc73c\ub85c \uc120\uc5b8\ud558\uc9c0 \uc54a\uc544\ub3c4 \ubc30\uc5f4 \ubcc0\uc218 \uc0ac\uc6a9 \uac00\ub2a5\ud568<br>declare -a array<br><br># 4\uac1c\uc758 \ubc30\uc5f4 \uac12 \uc9c0\uc815<br>array=(\"hello\" \"test\" \"array\" \"world\")<br><br># \uae30\uc874 \ubc30\uc5f4\uc5d0 1\uac1c\uc758 \ubc30\uc5f4 \uac12 \ucd94\uac00(\uc21c\ucc28\uc801\uc73c\ub85c \uc785\ub825\ud560 \ud544\uc694 \uc5c6\uc74c)<br>array[4]=\"variable\"<br><br># \uae30\uc874 \ubc30\uc5f4 \uc804\uccb4\uc5d0 1\uac1c\uc758 \ubc30\uc5f4 \uac12\uc744 \ucd94\uac00\ud558\uc5ec \ubc30\uc5f4 \uc800\uc7a5(\ubc30\uc5f4 \ubcf5\uc0ac \uc2dc \uc0ac\uc6a9)<br>array=(${array[@]} \"string\")<br><br># \ubc30\uc5f4 \ub8e8\ud551, ${loop1}\uc774 \ubc30\uc5f4\uac12<br>for loop1 in \"${array[@]}\"<br>do<br>  echo ${loop1}<br>done<br><br># \uc704\uc5d0\uc11c \uc9c0\uc815\ud55c \ubc30\uc5f4 \ucd9c\ub825<br>echo \"hello world \ucd9c\ub825: ${array[0]} ${array[3]}\"<br>echo \"\ubc30\uc5f4 \uc804\uccb4 \ucd9c\ub825: ${array[@]}\"<br>echo \"\ubc30\uc5f4 \uc804\uccb4 \uac1c\uc218 \ucd9c\ub825: ${#array[@]}\"<br><br>printf \"\ubc30\uc5f4 \ucd9c\ub825: %s\\n\" ${array[@]}<br><br># \ubc30\uc5f4 \ud2b9\uc815 \uc694\uc18c\ub9cc \uc9c0\uc6b0\uae30<br>unset array[4]<br>echo \"\ubc30\uc5f4 \uc804\uccb4 \ucd9c\ub825: ${array[@]}\"<br><br># \ubc30\uc5f4 \uc804\uccb4 \uc9c0\uc6b0\uae30<br>unset array<br>echo \"\ubc30\uc5f4 \uc804\uccb4 \ucd9c\ub825: ${array[@]}\"<br><br>#############################<br># \ud568\uc218 \uc0ac\uc6a9 \uc608\uc81c (Function)<br>#############################<br>string_test1() {<br>  echo \"string test 1\"<br>}<br><br>string_test2() {<br>  echo \"string test 2\"<br>  echo \"\uac1c\ubcc4 \uc778\uc218: ${1} ${2} ${3} ${4}\"<br>  echo \"\uc804\uccb4 \uc778\uc218: ${@}\"<br>}<br>string_test1<br>string_test2 \"param-1\" \"param 2\" \"param_3\" \"param 4\"<br><br>#############################<br># \ud14d\uc2a4\ud2b8 \ud30c\uc77c \uc77d\uae30<br>#############################<br>while read READ_STRING<br>do<br>  STRLEN=`echo -n $READ_STRING | wc -c`<br>  if [ ${STRLEN=} -gt 20 ]<br>  then<br>    echo ${READ_STRING}<br>  fi<br>done &lt; ${TEXT_FILE}<br><br>#############################<br># case\ubb38 \uc608\uc81c<br>#############################<br>case \"$1\" in<br>  \"start\")<br>    func_start<br>    ;;<br>  \"stop\")<br>    func_stop<br>    ;;<br>  \"status\")<br>    status anacron<br>    ;;<br>  \"restart\")<br>    func_stop<br>    func_start<br>    ;;<br>  \"condrestart\")<br>    if test \"x`pidof anacron`\" != x; then<br>      stop<br>      start<br>    fi<br>    ;;<br>  *)<br>    echo $\"Usage: $0 {start|stop|restart|condrestart|status}\"<br>    exit 1<br>esac<br><br>#############################<br># if\ubb38 \uc608\uc81c<br>#############################<br>if [ conditons ]<br>then<br>  \uc870\uac74 \ub9cc\uc871\uc2dc \uc2e4\ud589\ud558\uace0\uc790 \ud558\ub294 \ubb38\uc7a5<br>elif [ conditons ]<br>  \ub450\ubc88\uc9f8 \uc870\uac74 \ub9cc\uc871\uc2dc \uc2e4\ud589 \ubb38\uc7a5<br>else<br>  \uc870\uac74 \ubd88\ub9cc\uc871\uc2dc \uc2e4\ud589\ud558\uace0\uc790 \ud558\ub294 \ubb38\uc7a5<br>fi<br><br>if [ $1 -gt 100 ]<br>then<br>  echo Hey that\\'s a large number.<br>  pwd<br>fi<br><br>if [ ${value} -eq 0 ]; then<br>  echo value is 0<br>fi<br><br>if [ ${test} -gt 2 -a ${test} -le 7 ]<br>then<br>  echo test greater then 2 and lower then 7<br>fi<br><br>if [ \"$opt\" == 'test' ] || [ \"$opt\" == 'aaa' ]<br>then<br>  echo the value is ...<br>fi<br><br>[ -z ] : \ubb38\uc790\uc5f4\uc758 \uae38\uc774\uac00 0\uc774\uba74 \ucc38<br>[ -n ] : \ubb38\uc790\uc5f4\uc758 \uae38\uc774\uac00 0\uc774 \uc544\ub2c8\uba74 \ucc38<br>[ string ] : \ubb38\uc790\uc5f4\uc774 NULL\uc774 \uc544\ub2c8\uba74 \ucc38<br>[ string1 = string2 ] : \ubb38\uc790\uc5f4\uc774 \ub3d9\uc77c\ud558\uba74 \ucc38<br>[ string1 != string2 ] : \ubb38\uc790\uc5f4\uc774 \ub2e4\ub974\uba74 \ucc38<br>[ -eq ] : \uac12\uc774 \uac19\uc73c\uba74 \ucc38<br>[ -ne ] : \uac12\uc774 \ub2e4\ub974\uba74 \ucc38<br>[ -gt ] : \uac121 > \uac122<br>[ -ge ] : \uac121 >= \uac122<br>[ -lt ] : \uac121 &lt; \uac122<br>[ -le ] : \uac121 &lt;= \uac122<br>[ -a ] : &amp;&amp;\uc5f0\uc0b0\uacfc \ub3d9\uc77c and \uc5f0\uc0b0<br>[ -o ] : ||\uc5f0\uc0b0\uacfc \ub3d9\uc77c or \uc5f0\uc0b0<br>[ -d ] : \ud30c\uc77c\uc774 \ub514\ub809\ud1a0\ub9ac\uba74 \ucc38<br>[ -e ] : \ud30c\uc77c\uc774 \uc788\uc73c\uba74 \ucc38<br>[ -L ] : \ud30c\uc77c\uc774 \uc2ec\ubcfc\ub9ad \ub9c1\ud06c\uba74 \ucc38<br>[ -r ] : \ud30c\uc77c\uc774 \uc77d\uae30 \uac00\ub2a5\ud558\uba74 \ucc38<br>[ -s ] : \ud30c\uc77c\uc758 \ud06c\uae30\uac00 0 \ubcf4\ub2e4 \ud06c\uba74 \ucc38<br>[ -w ] : \ud30c\uc77c\uc774 \uc4f0\uae30 \uac00\ub2a5\ud558\uba74 \ucc38<br>[ -x ] : \ud30c\uc77c\uc774 \uc2e4\ud589 \uac00\ub2a5\ud558\uba74 \ucc38<br>[ \ud30c\uc77c1 -nt \ud30c\uc77c2 ] : \ud30c\uc77c1\uc774 \ud30c\uc77c2\ubcf4\ub2e4 \ucd5c\uc2e0\ud30c\uc77c\uc774\uba74 \ucc38<br>[ \ud30c\uc77c1 -ot \ud30c\uc77c2 ] : \ud30c\uc77c1\uc774 \ud30c\uc77c2\ubcf4\ub2e4 \uc774\uc804\ud30c\uc77c\uc774\uba74 \ucc38<br>[ \ud30c\uc77c1 -ef \ud30c\uc77c2 ] : \ud30c\uc77c1\uc774 \ud30c\uc77c2\ub791 \uac19\uc740 \ud30c\uc77c\uc774\uba74 \ucc38<br>[ -r \ud30c\uc77c\uba85 ] : \ud574\ub2f9 \ud30c\uc77c\uc774 \uc77d\uae30 \uac00\ub2a5\ud558\uba74 \ucc38<br>[ -w \ud30c\uc77c\uba85 ] : \ud574\ub2f9 \ud30c\uc77c\uc774 \uc4f0\uae30 \uac00\ub2a5\ud558\uba74 \ucc38<br>[ -x \ud30c\uc77c\uba85 ] : \ud574\ub2f9 \ud30c\uc77c\uc774 \uc2e4\ud589 \uac00\ub2a5\ud558\uba74 \ucc38<br>[ -s \ud30c\uc77c\uba85 ] : \ud574\ub2f9 \ud30c\uc77c\uc758 \uc0ac\uc774\uc988\uac00 \uc81c\ub85c \uc774\uc0c1\uc774\uba74 \ucc38<br>[ -d \ud30c\uc77c\uba85 ] : \ud574\ub2f9 \ud30c\uc77c\uc774 \ub514\ub809\ud1a0\ub9ac\uba74 \ucc38<br>[ -f \ud30c\uc77c\uba85 ] : \ud574\ub2f9 \ud30c\uc77c\uc774 \ubcf4\ud1b5 \ud30c\uc77c\uc774\uba74 \ucc38<br>[ -h \ud30c\uc77c\uba85 ] : \ud574\ub2f9 \ud30c\uc77c\uc774 \ub9c1\ud06c \ud30c\uc77c\uc774\uba74 \ucc38<br><br>#############################<br># while\ubb38 \uc608\uc81c<br>#############################<br>while [ $i -lt 3 ]<br>do<br>  echo $i<br>  i=$(($i+1))<br>done<br><br>#############################<br># for\ubb38 \uc608\uc81c<br>#############################<br>for i in 1 2 3 4 5<br>do<br>   echo \"Welcome $i times\"<br>done<br>-----<br>for i in {1..5}<br>do<br>   echo \"Welcome $i times\"<br>done<br>-----<br>for (( ; ; ))<br>do<br>   echo \"infinite loops [ hit CTRL+C to stop]\"<br>done<br>-----<br>for file in \/etc\/*<br>do<br>  if [ \"${file}\" == \"\/etc\/resolv.conf\" ]<br>    then<br>      countNameservers=$(grep -c nameserver \/etc\/resolv.conf)<br>      echo \"Total  ${countNameservers} nameservers defined in ${file}\"<br>      break<br>  fi<br>done<br><br>#############################<br># \ud30c\uc77c\uba85\uacfc \ud655\uc7a5\uc790 \ucd94\ucd9c<br>#############################<br>NAME=`echo \"$FILE\" | cut -d'.' -f1`<br>EXTENSION=`echo \"$FILE\" | cut -d'.' -f2`<br><br>FILE=test.tar.gz<br>% echo ${FILE%%.*}<br>test<br>% echo ${FILE%.*}<br>test.tar<br>% echo ${FILE#*.}<br>tar.gz<br>% echo ${FILE##*.}<br>gz<br><br>#############################<br># find (\ud30c\uc77c\uba85 \uac80\uc0c9)<br>#############################<br>find . -name \"*.c\" -print<br>\u2191: *.c \ud30c\uc77c \ucc3e\uae30<br><br>find . -name \"*.c\" -print<br>\u2191: *.c \ud30c\uc77c\uc744 \ucc3e\uc544\uc11c .c$\ub85c \ud655\uc7a5\uc790 \ubcc0\uacbd<br><br>find . -atime +30 -print<br>\u2191: \uc77d\uc740\uc9c0 30\uc77c \uc774\uc0c1\ub41c \ud30c\uc77c \ucc3e\uae30<br><br>find . -mtime -1 -print<br>\u2191: 24\uc2dc\uac04 \ub0b4 \uc218\uc815\ub41c \ud30c\uc77c \ucc3e\uae30<br><br>find . -type f -name \"*.c\" -newer ttt.rc -print<br>\u2191: *c \ud30c\uc77c \uc911 ttt.rc \uc218\uc815 \uc774\ud6c4\uc5d0 \uc218\uc815\ub41c \ud30c\uc77c \ucc3e\uae30<br><br>find . -atime +7 -size +20480 -print<br>\u2191: \uc811\uadfc\ud55c\uc9c0 7\uc77c \uc774\uc0c1\uc774\uba70 10MB\uc774\uc0c1 \ud30c\uc77c(size unix:512B)<br><br>find . -name \"*.bak\" -print -exec rm -f {} \\;<br>\u2191: *.bak \ud30c\uc77c\uc744 \ucc3e\uc544\uc11c \ucd9c\ub825\ud558\uace0 \uc0ad\uc81c\ud55c\ub2e4. {}\ub294 \ucc3e\uc740 \ud30c\uc77c\uba85\uc774\uace0 \\;\ub294 \uba85\ub839\uc758 \ub05d\uc744 \uba85\uc2dc\ud568<br><br>find . -depth -name \"*.c\" -print -exec sh -c 'mv \"$1\" \"${1%.c}.c$\"' _ {} \\;<br>\u2191: \ubaa8\ub4e0 .c \ud30c\uc77c\uc744 \ucc3e\uc544 .c$\ub85c \ud655\uc7a5\uc790\ub9cc \ubcc0\uacbd\ud55c\ub2e4.<br><br>find . -print -exec touch -t \"201506171200.00\" {} \\;<br>find \/opt -name \"*\" -exec touch -t \"202101010000.00\" {} \\;<br>\u2191: \ud30c\uc77c \ubc0f \ub514\ub809\ud1a0\ub9ac\uc758 \uc2dc\uac04 \ubcc0\uacbd<br><br># ${OLDLOG_EXPDATE}\uc77c \uc774\uc0c1 \uacbd\uacfc\ub41c \ub85c\uadf8\ub97c \uc0ad\uc81c\ud55c\ub2e4.<br>OLDLOG_EXPDATE=3<br>find \"\/var\/log\" -mtime +${OLDLOG_EXPDATE} -name \"*.log\" -type f -exec rm -f {} \\;<br><br># \ubcf4\uc548\uc131 \uc2ec\uc758\ub97c \uc704\ud55c \ubd88\ud544\uc694\ud55c \ud30c\uc77c \uac80\uc0c9<br>find \/opt\/gate1\/www \\( -name \"*sample*\" -o -name \"*demo*\" -o -name \"*tutorial*\" -o -name \"*test*\" -o -name \"*manual*\" -o -name \"*example*\" -o -name \"*bak*\" -o -name \"*backup*\" -o -name \"*_[0-9][0-9][0-9]*\" \\) -print<br><br>#############################<br># sed (stream editor: \ud30c\uc77c \ub0b4\uc758 \ubb38\uc790\uc5f4 \uc870\uc791)<br>#############################<br>\u261e\uae30\ubcf8\ubb38\ubc95 : sed -i 's\/\ucc3e\ub294\ubb38\uc790\uc5f4\/\ubc14\uafc0\ubb38\uc790\uc5f4\/g' \uc785\ub825\ud30c\uc77c<br>(.*[]^$&amp;\/\\ \ubb38\uc790\ub294 \uba54\ud0c0\ubb38\uc790\ub77c \uc55e\uc5d0 \\\uc744 \ub450\uc5b4 \uad6c\ubd84\ud55c\ub2e4.)<br><br>sed -i -e 's\/Index\/\uc0c9\uc778\/g' -e 's\/Contents\/\ucc28\ub840\/g' test1.txt<br>\u2191: test1.txt \uc5d0\uc11c \"Index\"\uc744 \"\uc0c9\uc778\"\uc73c\ub85c \"Contents\"\ub97c \"\ucc28\ub840\"\ub85c \ubc14\uafb8\uc5b4 test2.txt\uc5d0 \uc800\uc7a5<br><br>sed -i 's\/\\\/usr\\\/local\/\\\/usr\/g' test1.txt<br>\u2191: \/usr\/local\uc744 \/usr\ub85c \ubc14\uafbc\ub2e4.<br><br>sed -i 's\/192.168.1\/10.10.10\/g' test1.txt<br>\u2191: 192.168.1\uc744 10.10.10\uc73c\ub85c \ubc14\uafbc\ub2e4.<br><br>sed -i '\/^ *$\/d' test1.txt<br>\u2191: \uacf5\ubc31\ub9cc \uc788\ub294 \ub77c\uc778 \uc0ad\uc81c (\uc8fc\uc758:^\uc640 *\uc0ac\uc774\uc5d0 \uacf5\ubc31 \uc788\uc74c)<br><br>sed -i 's\/[[:blank:]]*$\/g' test.txt<br>\u2191: \uc904\ub05d \uacf5\ubc31\uacfc \ud0ed \uc81c\uac70<br><br>sed -i 's\/\\t\/        \/g' tab-file.txt<br>\u2191: \ubaa8\ub4e0 \ud0ed\uc744 \uacf5\ubc31\uc73c\ub85c \uce58\ud658<br><br>sed -i 's\/^        \/\\t\/g' test.txt<br>\u2191: \ub9e8 \uc55e\uc5d0 \uacf5\ubc31\ub9cc \ud0ed\uc73c\ub85c \uce58\ud658 (Makefile \uc6a9)<br><br>sed -i 's\/&lt;[^>]*>\/\/g' test.html<br>\u2191: test.html\uc5d0\uc11c HTML \ud0dc\uadf8 \uc0ad\uc81c<br><br>sed -n '\/[Ll]ove\/p' test1.txt<br>\u2191: Love or love\ub97c \ud3ec\ud568\ud558\ub294 \ub77c\uc778\ub9cc \ucd9c\ub825<br><br>sed -e '\/#\/d' test1.txt > test2.txt<br>\u2191: test1.txt\uc758 \ub0b4\uc6a9\uc5d0\uc11c #\uc73c\ub85c \uc2dc\uc791\ub418\ub294 \ud589\uc744 \ubaa8\ub450 \uc81c\uac70 (\uc8fc\uc11d \uc81c\uac70)<br><br>sed -e '1,10d' test1.txt > test2.txt<br>\u2191: 1~10\ud589 \uc0ad\uc81c<br><br>sed -i 's\/^M$\/\/' test1.txt<br>\u2191: DOS \uac1c\ud589\ubb38\uc790\ub97c UNIX \uac1c\ud589\ubb38\uc790\ub85c \ubcc0\uacbd (^M\uc740 \"Ctrl+V\" \ub204\ub974\uace0 \"Ctrl+M')<br><br>#############################<br># \ud2b9\uc815 \ub514\ub809\ud1a0\ub9ac\uc758 \ub9c8\uc6b4\ud2b8 \uc5ec\ubd80 \uccb4\ud06c<br>#############################<br>is_mounted() {<br>  mount | awk -v MOUNT_DIR=\"${1}\" '{ if ($3 == MOUNT_DIR) { print 1 } } ENDFILE{ exit -1 }'<br>}<br>MOUNT_OK=$(is_mounted ${STORAGE_MOUNT_DIR})<br>if [ -z ${MOUNT_OK} ] || [ ${MOUNT_OK} != \"1\" ]<br>then<br>  echo \"ERROR: ${STORAGE_MOUNT_DIR} is not mounted.\"<br>  exit 2<br>fi<br><br>#############################<br># touch (\ud30c\uc77c \uc2dc\uac04 \ubcc0\uacbd)<br>#############################<br># \ud30c\uc77c \uc2dc\uac04(Access, Modify) \ubcc0\uacbd<br>touch -a -m -t 202101010000.00 file1<br><br># \ud30c\uc77c \ub0a0\uc9dc \ud655\uc778<br>stat file1<br><br># \ud30c\uc77c \ub0a0\uc9dc \uc77c\uad04 \ubcc0\uacbd<br>find \/mnt\/0_tmp -exec touch -a -m -t 202101010000.00 {} \\;<br><br>#############################<br># grep (g\/re\/p: \ubb38\uc790\uc5f4 \uac80\uc0c9)<br>#############################<br>-i : \uc601\ubb38\uc758 \ub300\uc18c\ubb38\uc790\ub97c \uad6c\ubcc4\ud558\uc9c0 \uc54a\ub294\ub2e4.<br>-v : pattern\uc744 \ud3ec\ud568\ud558\uc9c0 \uc54a\ub294 \ub77c\uc778\uc744 \ucd9c\ub825\ud55c\ub2e4.<br>-n : \uac80\uc0c9 \uacb0\uacfc\uc758 \uac01 \ud589\uc758 \uc120\ub450\uc5d0 \ud589 \ubc88\ud638\ub97c \ub123\ub294\ub2e4(first line is 1).<br>-l : \ud30c\uc77c\uba85\ub9cc \ucd9c\ub825\ud55c\ub2e4.<br>-c : \ud328\ud134\uacfc \uc77c\uce58\ud558\ub294 \ub77c\uc778\uc758 \uac1c\uc218\ub9cc \ucd9c\ub825\ud55c\ub2e4.<br>-r : \ud558\uc704 \ub514\ub809\ud1a0\ub9ac\uae4c\uc9c0 \uac80\uc0c9\ud55c\ub2e4.<br><br>grep -i \"\ud64d\uae38\ub3d9|\uae40\ucca0\uc218|\ubc15\uc21c\ud76c\" .\/*<br>\ud604\uc7ac \ub514\ub809\ud1a0\ub9ac\uc758 \ubaa8\ub4e0 \ud30c\uc77c\uc5d0\uc11c \ud64d\uae38\ub3d9 or \uae40\ucca0\uc218 or \ubc15\uc21c\ud76c\ub97c \uac80\uc0c9\ud55c\ub2e4.<br><br>grep -rn \"Allow\" \/etc\/*<br>\/etc \ubc11\uc758 \ubaa8\ub4e0 \ud30c\uc77c\uc5d0\uc11c Allow \ubb38\uc790\uc5f4\uc744 \uac80\uc0c9\ud558\uace0 \ud589\ubc88\ud638\ub97c \ucd9c\ub825\ud55c\ub2e4.<br><br>#############################<br># ln (link: \ud30c\uc77c or \ub514\ub809\ud1a0\ub9ac \ub9c1\ud06c)<br>#############################<br>ln -s &lt;\uc6d0\ubcf8\ud30c\uc77c> &lt;\uc2ec\ubcfc\ub9ad\ub9c1\ud06c\ud30c\uc77c><br><br>ex) ln -s \/bin\/ls dir<br><br>\uc2ec\ubcfc\ub9ad \ub9c1\ud06c\ub294 \uc6d0\ubcf8\uc774 \uc0ad\uc81c\ub418\uba74 \uc0ac\uc6a9\ubd88\uac00\ud558\ub098 \ud558\ub4dc\ub9c1\ud06c\ub294 \uc0ac\uc6a9\uac00\ub2a5.<br><br>#############################<br># tail (\ud30c\uc77c \ub0b4\uc6a9 \ub05d\ubd80\ubd84 \ubd80\ud130 \uc5f4\ub78c)<br>#############################<br>tail -f \/var\/log\/messages<br>\u2191: \/var\/log\/messages\ub97c \uc2e4\uc2dc\uac04\uc73c\ub85c \ucd9c\ub825(\ubaa8\ub2c8\ud130\ub9c1)<br><br>#############################<br># Shell profile reload<br>#############################<br>. ~\/.profile<br>. ~\/.bash_profile<br>. \/etc\/profile<br><br>#############################<br># ksh(AIX) Shell Auto Completion<br>#############################<br>-\uc790\ub3d9\uc644\uc131 : ESC+\\ or ESC+ESC<br>-\ud3b8\uc9d1 (vi \ubaa8\ub4dc)<br>ESC \ub97c \ub204\ub974\uba74 vi \ubaa8\ub4dc\ub85c \ub4e4\uc5b4\uac00\uace0 k,j \ub97c \uc774\uc6a9\ud558\uc5ec \ucee4\uc11c \uc774\ub3d9.<br>\u203b \ud658\uacbd\ubcc0\uc218\uc5d0 vi \ubaa8\ub4dc\ub85c \uc124\uc815\ub418\uc5b4 \uc788\uc5b4\uc57c \ud568.<br>EDITOR=vi; export EDITOR<br><br>#############################<br># diff (\ud30c\uc77c\/\ub514\ub809\ud1a0\ub9ac \ube44\uad50\ud574\uc11c patch \ud30c\uc77c \ub9cc\ub4e6)<br>#############################<br>diff -urN dir.orig dir.work > dir.patch<br>(dir.orig\ub294 \uc6d0\ubcf8, dir.work\ub294 \uc791\uc5c5\ubcf8)<br>\uc11c\ub85c \ube44\uad50\ud574\uc11c \ub2e4\ub978\uc810\uc744 dir.patch\uc5d0 \ub123\ub294\ub2e4.<br><br>#############################<br># patch<br>#############################<br>patch -p0 &lt; dir.patch<br>(p0\ub294 p1, p2 \ub4f1\uc73c\ub85c \ubc14\uafc0 \uc218 \uc788\uc73c\uba70 \ub300\uc0c1 \uacbd\ub85c\uac00 \ud55c\ub2e8\uacc4\uc529 \uc904\uc5b4\ub4e0\ub2e4.)<br><br>#############################<br># zip<br>#############################<br>zip -r -9 dir.zip dir<br><br>#############################<br># zip<br>#############################<br>zip -r -9 dir.zip dir<br><br>#############################<br># \uc785\ucd9c\ub825 \ub9ac\ub2e4\uc774\ub809\uc158<br>#############################<br>\uba85\ub839 >&amp; \ud30c\uc77c\uba85 : \uba85\ub839\uc774 \uc2e4\ud589\ub41c \ud45c\uc900 \ucd9c\ub825\uc758 \uacb0\uacfc\uc640 \uc5d0\ub7ec\ub97c \ud30c\uc77c\ub85c \ucd9c\ub825<br>\uba85\ub839 >! \ud30c\uc77c\uba85 : \ud30c\uc77c\uc758 \uc874\uc7ac \uc720\ubb34\uc640 \uc0c1\uad00\uc5c6\uc774 \uc0dd\uc131\ud558\uace0 \uba85\ub839\uc774 \uc2e4\ud589\ub41c \ud45c\uc900 \ucd9c\ub825\uc758 \uacb0\uacfc\ub97c \ud30c\uc77c\ub85c \ucd9c\ub825<br>\uba85\ub839 >&amp;! \ud30c\uc77c\uba85 : \ud30c\uc77c\uc758 \uc874\uc7ac \uc720\ubb34\uc640 \uc0c1\uad00\uc5c6\uc774 \uc0dd\uc131\ud558\uace0 \uba85\ub839\uc774 \uc2e4\ud589\ub41c \ud45c\uc900 \ucd9c\ub825\uc758 \uacb0\uacfc\uc640 \uc5d0\ub7ec\ub97c \ud30c\uc77c\ub85c \ucd9c\ub825<br>\uba85\ub839A | \uba85\ub839B : \uba85\ub839A\uc758 \ucd9c\ub825\uc744 \uba85\ub839B \uc785\ub825\uc73c\ub85c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\ud589<br>\uba85\ub839A |&amp; \uba85\ub839B : \uba85\ub839A\uc758 \ucd9c\ub825\uacfc \uc5d0\ub7ec\ub97c \uba85\ub839 B\uc758 \uc785\ub825\uc73c\ub85c \uc0ac\uc6a9\ud558\uc5ec \uc2e4\ud589<br><br>\u25a0 \ud30c\uc77c \ub514\uc2a4\ud06c\ub9bd\ud130<br>\ud45c\uc900\uc785\ub825:0 \ud45c\uc900\ucd9c\ub825:1 \ud45c\uc900\uc5d0\ub7ec:2<br><br>#############################<br># \uc2dc\uc2a4\ud15c IP\uc8fc\uc18c \uc54c\uc544\ub0b4\uae30<br>#############################<br>get_system_ip_addr() {<br>  SYSTEM_IP_ADDR=$(hostname -I | awk '{print $1}')<br>  if [ -z ${SYSTEM_IP_ADDR} ]<br>  then<br>    echo \"ERROR: Unknown IP Address.\"<br>    exit<br>  fi<br>  echo ${SYSTEM_IP_ADDR}<br>}<br><br>#############################<br># \uc2dc\uc2a4\ud15c \uc778\ud130\ud398\uc774\uc2a4\uba85 \uc54c\uc544\ub0b4\uae30<br>#############################<br>get_system_if_name() {<br>  SYSTEM_IF_NAME=$(ls -1 \/sys\/class\/net\/ | awk '{ if ( $1 != \"lo\") print $1 }' | head -n 1)<br>  if [ -z ${SYSTEM_IF_NAME} ]<br>  then<br>    echo \"ERROR: Unknown interface name.\"<br>    exit<br>  fi<br>  echo ${SYSTEM_IF_NAME}<br>}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>############################## \uc624\ub958 \ubc1c\uc0dd \uc2dc \uc2a4\ud06c\ub9bd\ud2b8 \uc2e4\ud589# \uc911\uc9c0 \ub610\ub294 \ubb34\uc2dc\ud558\uace0 \uc9c4\ud589#############################set -eset +e############################## \ubcc0\uc218 \uc0ac\uc6a9 \ubc29\ubc95 (Variable)#############################\u25a3 \uc704\uce58 \ub9e4\uac1c \ubcc0\uc218(Positional Parameters)$0 : \uc2e4\ud589\ub41c \uc2a4\ud06c\ub9bd\ud2b8 \uc774\ub984$1 : $1 $2 $3&#8230;${10}\uc778\uc790 \uc21c\uc11c\ub300\ub85c \ubc88\ud638\uac00 \ubd80\uc5ec\ub41c\ub2e4. 10\ubc88\uc9f8\ubd80\ud130\ub294 &#8220;{}&#8221;\uac10\uc2f8\uc918\uc57c \ud568$* : \uc804\uccb4 \uc778\uc790 \uac12$@ : \uc804\uccb4 \uc778\uc790 \uac12($* \ub3d9\uc77c\ud558\uc9c0\ub9cc \uc30d\ub530\uc634\ud45c\ub85c \ubcc0\uc218\ub97c \uac10\uc2f8\uba74 \ub2e4\ub978 \uacb0\uacfc \ub098\uc634)$# : \ub9e4\uac1c \ubcc0\uc218\uc758 \ucd1d \uac1c\uc218\u25a3 \ud2b9\uc218 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[22],"tags":[],"class_list":["post-576","post","type-post","status-publish","format-standard","hentry","category-development_unix"],"_links":{"self":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/576","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=576"}],"version-history":[{"count":0,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/576\/revisions"}],"wp:attachment":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=576"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=576"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=576"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}