複数のファイルパスに入力があることを確認するためのCaseステートメントの構文

複数のファイルパスに入力があることを確認するためのCaseステートメントの構文

エンタープライズホストの完全なリストを含む入力リストがあります(/home/completehostlistcheck.txt)。現在存在する環境(比較合計へdev=/home/dev.txtの入力)に基づいてprod=/home/prod.txt実行され、echo現在存在する環境を指します。問題は、大文字と小文字の構文が機能しないことです。

#!/bin/bash

dev=/home/dev.txt
prod=/home/prod.txt

for host in $(</home/completehostlistcheck.txt) 
do 
ssh $host

chk=$hostname
  case "$chk" in
dev) echo "this is dev"
;;
prod) echo "this is prod"
;;

esac 
done

ベストアンサー1

開発ホストと本番ホストの違いを知っている場合、または単純な命名規則(例:dev.example.comvs prod.example.com.)がある場合は、次のように簡単にできます。

for host in $(</home/completelistlistcheck.txt); do
    case "$(ssh $host hostname)" in
        *dev*)
            env="development"
            break
            ;;
        *prod*)
            env="production"
            break
            ;;
        *)
            env="non-categorized"
            break
            ;;
    esac
    echo "$host is a $env host."
done

内容を解析する必要がある各ホストにファイルがある場合は、runコマンドにそのファイルを渡すのではなくcat /path/to/file使用してください。hostnamessh

おすすめ記事