ユーザーが入力できるようにしたい:
./script.sh server[01-10]type
私はこれをすでに機能させており、[az] または [0-99] で動作します。私がそれをすべて正しい方法で行ったかどうか、そして同じことを行うより簡単な方法があるかどうかは本当にわかりません.
このようなことを行う簡単な方法があるかどうか、および次のような複数のワイルドカード入力を使用するのがどれほど簡単かを確認したかったのです。
./script.sh (server|web)[01-10][a-z]
次に、web01-10a-z または server01-10a-z のいずれかを解析し、すべてのサーバーを一覧表示します。
これは私がこれまでに持っていたものであり、整理する必要があることを認めていますが、整理されたコード呼び出しに焦点を当てる前に、よりうまく機能させることを考えていました.
#!/bin/bash
input=$1;
if [[ $input =~ \[ ]];then
s="["
f="]"
host_start=`echo $input|awk -F"[" '{print $1}'`
host_end=`echo $input|awk -F"]" '{print $2}'`
start=`awk -v a="$input" -v b="$s" 'BEGIN{print index(a,b)}'`
fin=`awk -v a="$input" -v b="$f" 'BEGIN{print index(a,b)}'`
vals=`expr $fin - $start`
((start++))
((vals--))
in1=`echo $input| awk -v s=$start -v f=$vals '{ print substr( $0, s($0),f($0) ) }'`
val1=`echo $in1|awk -F"\-" '{print $1}'`
val2=`echo $in1|awk -F"\-" '{print $2}'`
for index in $(eval echo {$val1..$val2})
do
server="$host_start$index$host_end"
echo "Current server: $server "
done
fi
これを実行すると、次のようになります。
./run.bash apache[9-11]
Current server: apache9
Current server: apache10
Current server: apache11
$ ./run.bash apache[f-k]
Current server: apachef
Current server: apacheg
Current server: apacheh
Current server: apachei
Current server: apachej
Current server: apachek
$ ./run.bash apache[f-k]abc
Current server: apachefabc
Current server: apachegabc
Current server: apachehabc
Current server: apacheiabc
Current server: apachejabc
Current server: apachekabc
みんなに感謝するために更新
3行で上記のすべてを実行し、ここで必要なすべてのタイプを処理します:
#!/bin/bash
val=$1;
value=`echo "$val"|sed 's:(:{:g; s:):}:g; s:|:,:g; s/^//;s/$//'`
value=`echo "$value"|sed 's:\[:{:g; s:\]:}:g; s:-:\.\.:g; s/^//;s/$//'`
(eval echo $value)
./test-brace.sh "(server|apache)[0-2][a-c]"
server0a server0b server0c server1a server1b server1c server2a server2b server2c apache0a apache0b apache0c apache1a apache1b apache1c apache2a apache2b apache2c