カメニッキ

カメとインコと釣りの人です

最近覚えたシェルスクリプトの小ネタ




()
$ man bash



xargsfunction





awk



: if [ ]; then 使


Markdown

xargsfunction



 find xxxx | xargs cp xxxx 




  #!/bin/bash

  forxin `find /var/www -name xxx`
  do
    cmd="cp -v /hoge/fuga/xxx $x"
    [[ `md5sum $x | awk '{print $1}'` != "xxxxxxxxxxxxxxxxxxxxxxx" ]] && eval $cmd | :
  done


xargs5

#!/bin/bash

function sample() {
  cmd="cp -v /hoge/fuga/xxx $1"
  [[ `md5sum $1 | awk '{print $1}'` != "xxxxxxxxxxxxxxxxxxxxxxx" ]] && eval $cmd | :

}

# これしたらxargsから呼べることをしらなかった
export -f sample

find /var/www -name xxx | xargs -P5 -I{} bash -c "sample {}"


# 連想配列もどきのHを定義
declare -AHH["a"]="682f7xxxxxxxxxxxxxxxxxxx0"H["b"]="7808axxxxxxxxxxxxxxxxxxx2"H["c"]="c6ba1xxxxxxxxxxxxxxxxxxx6"H["d"]="64186xxxxxxxxxxxxxxxxxxxb"H["e"]="50d1dxxxxxxxxxxxxxxxxxxxc"

forxin a b c d e
do
# とりだす
echo ${H["$x"]}
done






declare -AHH["a"]="682f7xxxxxxxxxxxxxxxxxxx0"H["b"]="7808axxxxxxxxxxxxxxxxxxx2"H["c"]="c6ba1xxxxxxxxxxxxxxxxxxx6"H["d"]="64186xxxxxxxxxxxxxxxxxxxb"H["e"]="50d1dxxxxxxxxxxxxxxxxxxxc"

function sample(){
  # 682f7xxxxxxxxxxxxxxxxxxx0 
  echo ${H["a"]}
}

sample




#!/bin/bash

declare -AHH["a"]="682f7xxxxxxxxxxxxxxxxxxx0"H["b"]="7808axxxxxxxxxxxxxxxxxxx2"H["c"]="c6ba1xxxxxxxxxxxxxxxxxxx6"H["d"]="64186xxxxxxxxxxxxxxxxxxxb"H["e"]="50d1dxxxxxxxxxxxxxxxxxxxc"

function sample(){
  # 682f7xxxxxxxxxxxxxxxxxxx0
  echo ${H["a"]}
  echo "hoge"
}
# ここで配列はexportされないらしいけど、あんまり詳しく調べてない。当たり前の動き?
export -f sample
find ~/test -type f  | xargs bash -c "sample"


#!/bin/bash

var1="xxxxxxxxxxxxxxxx"
var2="yyyyyyyyyyyyyyyy"
var3="zzzzzzzzzzzzzzzz"

foriin `seq 1 3`
do  
  # 変数を使って作る変数名は一度変数に入れなきゃだめ
  tmp="var${i}"
  echo ${!tmp}
done

awk



/home/hoge/fuga/piyo/php5.2.cgi  php5.2.cgi 
[root@hoge ~]# cat test.sh
#!/bin/bash

forxin `find ~/home/users/php-bin/ -path "*/.php-bin/php*.cgi"`
do
echo $x | awk -F/ '{print $10}'
done

awkbash使
[root@hoge ~]# cat test2.sh
#!/bin/bash

forxin `find ~/home/users/php-bin/ -path "*/.php-bin/php*.cgi"`
do
echo ${x##/*/}
done


[root@hoge ~]# time ./test.sh
・・・
real    0m8.316s
user    0m2.367s
sys 0m7.828s

[root@hoge ~]# time ./test2.sh
・・・
real    0m0.763s
user    0m0.357s
sys 0m0.394s




find ~/home/users/php-bin/ -path "*/.php-bin/php*.cgi" | awk -F/ '{print $10}'

findawk使for


 5.x  x cut
[user ~/work/test]$ ll
total 0
-rw-r--r--  1 user  staff     0B  6 28 00:49 hogehogeho_ver5.2.sh
-rw-r--r--  1 user  staff     0B  6 28 00:49 xxxx.yyyy-abcdefghijk_ver5.2.sh
-rw-r--r--  1 user  staff     0B  6 28 00:49 xxxxxxxxxxxxxxxxxxxxxxxxxxx_ver5.2.sh
-rw-r--r--  1 user  staff     0B  6 28 00:49 yyyyyyyyyyyy-aaaaaaaaaaaaaaaa_ver5.3.sh
[user ~/work/test]$ forxin `find . -type f`
> do
> echo ${x:${#x}-4:1}
> done
2
2
2
3

: if [ ]; then 使



test使
[PMAC226S ~/work]$ cat test.sh
#!/bin/bash

foriin `seq 1 1000000`
do
  if [ "$a" = "hoge" ]; then
    echo "hoge"
  else
    echo "fuga"
  fi
done


[PMAC226S ~/work]$ cat test2.sh
#!/bin/bash

foriin `seq 1 1000000`
do
  [[ "$a" = "hoge" ]]  && echo "hoge" || echo "fuga"
done

 
[PMAC226S ~/work]$ time ./test.sh
・・・
real    0m30.164s
user    0m20.777s
sys 0m2.917s

[PMAC226S ~/work]$ time ./test2.sh
・・・
real    0m25.246s
user    0m17.777s
sys 0m1.812s