この記事は約4分25秒で読むことができます。

shellテストの練習

テストスクリプト

コード表示

[root@61eff46d2318 html]# cat a.sh 
#!/bin/bash -eu
fmtclr(){
  local clr_nm clr
  readonly clr_nm="$1"
  shift
  case ${clr_nm} in
    red) clr=31;;
    green) clr=32;;
    yellow) clr=33;;
    *) clr=30;;
  esac
  printf "\033[${clr}m%b\033[m\n" "$@"
}

hdlerr(){
  fmtclr yellow false
}

prt(){
  echo "______________________________________________$1______________________________________________"
  echo -e "$2"
}

ast(){
  qes=$1
	shift
  ans="$@"
  prt 'qes' "${qes}"
  rsv=$(echo ${qes} | xargs -t -I@ bash -c '@') || hdlerr
  prt 'rsv' "${rsv}"
  prt 'ans' "${ans}"
  if [[ $(echo -e "${ans}") =~ $(echo -e "${rsv}") ]]; then
  	fmtclr green true
  else
  	fmtclr yellow false
  fi
}
[root@61eff46d2318 html]# ll
total 4
-rw-r--r--. 1 root root 657 May  1 18:47 a.sh
[root@61eff46d2318 html]# chmod u+x *sh
[root@61eff46d2318 html]# ll
total 4
-rwxr--r--. 1 root root 657 May  1 18:47 a.sh

テストスクリプトを読み込む

コード表示

[root@61eff46d2318 html]# . ./a.sh

テストする

コード表示

[root@61eff46d2318 html]# ast "echo {a..c}" "a b c"
______________________________________________qes______________________________________________
echo {a..c}
bash -c echo {a..c} 
______________________________________________rsv______________________________________________
a b c
______________________________________________ans______________________________________________
a b c
true

あとがき

エスケープの癖とか見抜けるようになってくる。これでawkの練習するぞー。

Leave a Reply

Your email address will not be published. Required fields are marked *