ここでは初心者の方は、私が使っている混乱している言葉を許してください。 私が持っている共通のタスクは、名前のリストを取得し、テーブル内の名前を見て、それらが私たちのサイトに "生きている"かどうかを確認するMySQLクエリを実行することです。初心者:入れ子式のif文、ループの結果、SQLの結果
これを一度に1つずつ実行すると、私のSQLクエリが正常に動作します。私は、複数の名前をリストしたファイルからループを使ってクエリを実行したかったのです。これもうまく動作します。
私はすぐにこれを入力して作業を行うことができるように私は私のbashプロファイルにこのクエリループを追加しました:これは正常に動作します
$ ValidOnSite fileName
を、そして私もの自分を思い出させるために私のプロセスの使用法ステートメントを追加しました構文
nameA
nameB
私はその後、入力します:
validOnSite list.txt
と両方のエントリ内のファイルが含ま "list.txtに" を使用して
validOnSite() {
if [[ "$1" == "" ]] || [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
echo "Usage:"
echo " $ validOnSite [filename]"
echo " Where validOnSite uses specified file as variables in sql query:"
echo " SELECT name, active FROM dbDb WHERE name=lines in file"
else
cat $1 | while read line ; do hgsql -h genome-centdb hgcentral -Ne "select name, active from dbDb where name='$line'" ; done
fi
:以下は、私はそれが正常に動作しなければならないものですlist.txtは自分のクエリ基準を満たしており、sqlにあります。結果は次のようになります。
nameA 1
nameB 1
各結果の後に "1"が表示されます。私はこれが何らかの「はい」のステータスだと考えています。
ここで、私はlist.txtに3番目の名前を追加します.1つは、sqlで一致しないことがわかっています。今list.txtに含まれています
nameA
nameB
foo
私は再び3行で私のリストについては、このコマンドを実行すると:
validOnSiteを
私の結果は、私が第一のバージョンを使用する場合と同じですLIST.TXT file.txtとの、そして私は、私はまだ行だけが成功したかを確認、行が失敗したかを確認することはできません。
nameA 1
nameB 1
私はif文のネストされたを追加するためにあらゆる種類のものをしようとしている、その何かを"$行が一致すれば、"エコー "合格"、そうでなければ "失敗"となる。
私の結果に「1」は見たくない。緑と
nameA pass
nameB pass
foo fail
またはより良い、カラーコードパスをし、赤で失敗:2試合と1の不一致とfile.txtを使用して、私は私の結果はようにしたいと思います。
私はここで初心者、言ったように...右方向に:)
任意のポインタが役立つだろう。ここに私の最新の悲しい試みですが、私は完全に間違った方向に行くことも実現:
validOnSite() {
if [[ "$1" == "" ]] || [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
echo "Usage:"
echo " $ validOnSite [filename]"
echo " Where validOnSite uses specified file as variables in sql query:"
echo " SELECT name, active FROM dbDb WHERE name=lines in file"
else
cat $1 | while read line ; do hgsql -h genome-centdb hgcentral -Ne "select name, active from dbDb where name='$line'" > /dev/null ; done
if ("status") then
echo $line "failed"
echo $line "failed" >> outfile
else
echo $line "ok"
echo $line "ok" >>outfile
clear
cat outfile
fi
fi
何かが私の最後の試みでクレイジーに見える場合、それはされているので、それはだ - 私はちょうど周りグーグルとできるだけ多くをしようとしています私が学ぶことができるように物事を学ぶ。何か助けていただければ幸いですが、長いことこの作業に取り掛かってしまったと思いますが、私は前進して解決策を見つけることに興奮しています!私はstdoutを理解することについて私が欠けているものがあると思います。
注:私はアウトファイルは必要ありませんが、目標を達成するために必要な場合は問題ありません。標準的な結果だけで十分であり、好ましい。
注:hgssqlはMySQLサーバーの名前です。 MySQLの部分はうまく動作し、私はbashの出力を処理するためのより良い方法を探しています。私はstderrについて私が紛失しているものがあると思います。私は初心者ですから、私はかなり簡単な答えを探しています!
私はhgsql' 'に慣れていないんだけど、私は疑います'foo'のエラーは' stdout'の代わりに 'stderr'に書き出されます)、 'stdout'の単純なリダイレクションでファイルにリダイレクトされることはありません。もう一つの考えは、 'hgsql'は、失敗したクエリの結果を報告するために追加のオプション(例えば、' --verbose'などを推測する)を必要とするかもしれないということです。 'hgsql'文書を参考にして、これらの行に役立つものが見つかったら参照してください。 –
コメントありがとうございます。実際、hgsqlはMySQLサーバの名前に過ぎません。 – Cath
なぜ 'mysql -Bse 'query ..." '-B'(* batch *)モードを使うと、各クエリの結果が返されます。 –