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

awkでbashファンクション作成

結果のイメージ

コード表示

[oracle@centos pp]$ ll
合計 20
-rw-r--r--. 1 oracle docker   35  6月  7 06:57 clr
drwxr-xr-x. 2 oracle docker 4096  6月  7 07:57 const
-rw-r--r--. 1 oracle docker  310  6月  7 07:57 def_bg_func.sh
-rw-r--r--. 1 oracle docker  310  6月  7 07:57 def_fg_func.sh
-rwxr-xr-x. 1 oracle docker  646  6月  7 07:56 mkfunc.sh
[oracle@centos pp]$ tree
.
├── clr
├── const
│   ├── def_clr_bg.sh
│   └── def_clr_fg.sh
├── def_bg_func.sh
├── def_fg_func.sh
└── mkfunc.sh

1 directory, 6 files
[oracle@centos pp]$ cat def_bg_func.sh
#!/bin/bash
source ./const/*;
red(){
  echo -e "${BG_RED}$*${NORMAL}";
}
green(){
  echo -e "${BG_GREEN}$*${NORMAL}";
}
yellow(){
  echo -e "${BG_YELLOW}$*${NORMAL}";
}
blue(){
  echo -e "${BG_BLUE}$*${NORMAL}";
}
magenta(){
  echo -e "${BG_MAGENTA}$*${NORMAL}";
}
cyan(){
  echo -e "${BG_CYAN}$*${NORMAL}";
}
[oracle@centos pp]$ cat def_fg_func.sh
#!/bin/bash
source ./const/*;
red(){
  echo -e "${FG_RED}$*${NORMAL}";
}
green(){
  echo -e "${FG_GREEN}$*${NORMAL}";
}
yellow(){
  echo -e "${FG_YELLOW}$*${NORMAL}";
}
blue(){
  echo -e "${FG_BLUE}$*${NORMAL}";
}
magenta(){
  echo -e "${FG_MAGENTA}$*${NORMAL}";
}
cyan(){
  echo -e "${FG_CYAN}$*${NORMAL}";
}

mkfunc.sh

コード表示

[oracle@centos pp]$ cat ./mkfunc.sh
#!/bin/bash
flg=$1
fnm=$2
while read line;do
  rn=$(echo ${line} | sed -e 's/ .*//');
  func_name=$(echo ${line} | sed -e 's/.* //');
  const_name=$(echo ${func_name^^});
  echo " "| awk '
  BEGIN{
    FLG="'${flg}'"
  }
  {
    RN="'${rn}'"
    if(RN == "1"){
      print "#!/bin/bash"
      print "source ./const/*;"
    }
    FUNC_NAME="'${func_name}'"
    CONST_NAME="'FG_${const_name}'"
    if(FLG == "bg"){
      CONST_NAME="'BG_${const_name}'"
    }
    print FUNC_NAME"\x28\x29\x7b\x0a\x20\x20""echo -e ""\x22""${"CONST_NAME"}""\x24\x2a""${NORMAL}""\x22\x3b\x0a\x7d"
  }'
done < <(cat clr | nl) >${fnm}

あとがき

もうちょい工夫したいけど時間ないから、fin!!!

Leave a Reply

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