2番目のケースを追加するのに問題があります。私はコンピュータにログインし、コマンドを実行するためにこの小さなスクリプトを作成しました。しかし、コマンドのショートカットを定義する際に問題があります。たとえば、次のようになります。
./script.sh 44 - SSHを介してこのコンピュータにログインします(操作)。
./script.sh 44 r - このコンピュータをSSH経由で再起動します(2番目のケースの定義に問題があるため機能しません)。
だから私はテストのために次のように書きました。
LOG="$LOG""$AUT""$NMBR""$NR""$DOMAIN" "$Command"
$LOG
変数を定義し、
$Command
Command="sudo reboot"
ただし、このコマンドはコンピュータでは実行されません。私が何を間違っているのでしょうか?
以下にスクリプト全体を入れました。
DOMAIN="domain.domain.com"
PASS1="pass"
AUT="auth"
NMBR="001010"
LOG="sshpass -p$PASS1 ssh user@"
Command="sqlite3 /bin/ade/activity.sqlite 'Delete from state'"
if [[ $# == 0 ]]; then
echo "Invalid script call, give location or number as parameter:"
echo "2 / plau - NR 2 / Pn | I don't think it exists ?"
echo "44 / neun - NR 00101044 / Neundorf"
echo "45 / aks - NR 00101045 / Anton-Kraus-Straße"
echo "46 / chamiss - NR 00101046 / Chamissostraße"
echo "47 / prei - NR 00101047 / Preißelpöhl"
echo "48 / sud - NR 00101048 / Südvorstadt"
echo "49 / capitol - NR 00101049 / Capitol"
echo "50 / kgs - NR 00101050 / Dr.-Karl-Gelbke-Straße"
echo "51 / reusa - NR 00101051 / Reusa"
echo "52 / haus - NR 00101052 / Seehaus"
echo "53 / bus - NR 00101053 / Busbahnhof"
echo "54 / kn - NR 00101054 / Knielohstraße"
echo "55 / seume - NR 00101055 / Seumestraße"
echo "56 / neuels - NR 00101056 / Neue Elsterbrücke"
echo "57 / haupt - NR 00101057 / Hauptfriedhof"
echo "58 / tunnel2 - NR 00101058 / Tunnel II (Stadtgalerie)"
echo "59 / hlp - NR 00101059 / Hans-Löwel-Platz"
echo "60 / tunnel4 - NR 00101060 / Tunnel iV (PSB-Service)"
exit 1;
else
case in
"44") NR="0001"; LOGY="sshpass -p$PASS1 ssh mtvm@$AUT$NR$DOMAIN" ;;
"45") NR="45" ;;
"46") NR="46" ;;
"47") NR="47" ;;
"48") NR="48" ;;
"49") NR="49" ;;
"50") NR="50" ;;
"51") NR="51" ;;
"52") NR="52" ;;
"53") NR="53" ;;
"54") NR="54" ;;
"55") NR="55" ;;
"56") NR="56" ;;
"57") NR="57" ;;
"58") NR="58" ;;
"59") NR="59" ;;
"60") NR="60" ;;
"neun") NR="0001"; LOG2="sshpass -p$PASS1 ssh mtvm@$AUT$NR$DOMAIN" ;;
"aks") NR="45" ;;
"chamiss") NR="46" ;;
"prei") NR="47" ;;
"sud") NR="48" ;;
"capitol") NR="49" ;;
"kgs") NR="50" ;;
"reusa") NR="51" ;;
"haus") NR="52" ;;
"bus") NR="53" ;;
"kn") NR="54" ;;
"seume") NR="55" ;;
"neuels") NR="56" ;;
"haupt") NR="57" ;;
"tunnel2") NR="58" ;;
"hlp") NR="59" ;;
"tunnel4") NR="60" ;;
*) echo "Incorrect parameter"; exit 1 ;;
esac
echo "Login on $LOG$AUT$NMBR$NR$DOMAIN"
LOG="$LOG""$AUT""$NMBR""$NR""$DOMAIN" "$Command"
$LOG
LOG2="$LOG2"
$LOGY
fi
答え1
これは混乱して読まれます。私たちに見せてくれますか?どこあなたは問題がありますか?これらのスクリプトの間に値が欠落しており、case in
2行のLOGがあるという事実は、2つのSSHログインを順次実行することを示します。
この行も機能しません。割り当てられた値はスペースで囲む必要があります。これにより、Bashは実行にローカル環境を$Command
使用する必要があると考えます。LOG=...
LOG="$LOG""$AUT""$NMBR""$NR""$DOMAIN" "$Command"
おそらくそうすべきでしょう
LOG="$LOG$AUT$NMBR$NR$DOMAIN $Command"
LOG
混乱をオーバーライドする代わりに、次の操作を行います。
$LOG$AUT$NMBR$NR$DOMAIN $Command
すべての変数を完全に削除することをお勧めしますLOG*
。読むのは簡単ではありません。なぜ他の人に呼び出されるコマンドを設定させるのですか? LOGYとLOG2はどちらもホストNR 0001に対してのみ設定されますが、最初のものは引数が数値の場合にのみ設定され、もう1つは引数が文字列識別子の場合にのみ設定されます。ホストのユーザーだけが異なりますか?それでは、user=mtvm
そこで使用するのはどうですか?
とにかく、台本で書かなければならないなら、おおよそこれくらい使うと思います。他の場合/ esacに "sudo restart"を追加しました。
# ... declare vars PASS1, DOMAIN, etc.
user=$(whoami)
# your argument checks and help output here
case $1 in
neun ) shift; set -- 0001 "$@" ;;
# other cases
esac
case $1 in
0001 ) NR="$1"; user=mtvm ;;
# other cases
esac
if [ $# -eq 2 ]; then
case "$2" in r ) command="sudo reboot" ;; esac
fi
if [ -n "${command-}" ]
then
sshpass -p$PASS1 ssh $user@$AUT$NR$DOMAIN $command
else
sshpass -p$PASS1 ssh $user@$AUT$NR$DOMAIN
fi
ホスト名がaut0001domain.domain.com
間違っているように見えると仮定しますが、それはまさにそれです。