2012-02-21 9 views
0

可能性の重複:たとえば
converting string to lower case in bash shell scripting大文字を小文字に変換するにはどうしたらいいですか?

:私は中国のためにCとCの両方を認識することができるようにしたい簡単な方法で

echo *****Language translator***** 
echo please choose the language 
for Chinese enter c 
for French enter f 

。 fとFはフランス語として認識されます。

すべてを小文字に変換する方法はありますか?ここで

コードの一部:

場合は、[$言語== C];
その後、
は「翻訳する単語を入力します。」エコー
読み取りword_to_translate

+1

をこの質問は実際にあなたのニーズに合うかもしれない多くの例があります。 http://stackoverflow.com/questions/2264428/converting-string-to-lower-case-in-bash-shell-scripting –

+1

おそらくこれを全体的に行うより良い方法があります。どのように選択を検出していますか? –

+0

私の例を使って私に例を教えてください。ありがとうございました – cacosud

答えて

5

あなたは/大文字を小文字に文字を切り替えるtrを使用することができます。

echo $language | tr '[A-Z]' '[a-z]' 
+0

中国語やフランス語の誤字はどうですか? – cacosud

3

あなたは次のような場合、修飾子を使用することができます(man bash):

${parameter^}  # Convert the first character in ${parameter} to uppercase 
${parameter^^}  # Convert all characters in ${parameter} to uppercase 
${parameter,}  # Convert the first character in ${parameter} to lowercase 
${parameter,,}  # Convert all characters in ${parameter} to lowercase 

コードは次のようになります:TRの

# Read one character into $lang, with a nice prompt. 
read -n 1 -p "Please enter c for Chinese, or f for French: " lang 
if [ "${lang,,}" == "c" ]; then 
    echo "Chinese" 
elif [ "${lang,,}" == "f" ]; then 
    echo "French" 
else 
    echo "I don't speak that language." 
fi 
+0

申し訳ありませんが、-n 1 -pとはどういう意味ですか? – cacosud

+1

@cacosud: '-n 1'は、ユーザがreturnを押すのを待たずにただ一つの文字を読み込むことを意味し、' -p'はプロンプトとして次のものを使うことを意味します( 'echo'よりむしろもっと洗練された方法です)。 –

+0

不明な点をおかけして申し訳ありません。説明のおかげで、@ GordonDavisson。私は助けを求めるコメントを追加しました。 –

1

現代のバージョンでは、POSIX文字クラスをサポートしています[:アッパー:]と[:下:]

tr -s '[:upper:]' '[:lower:]' <inputfile> outputfile 

文字クラスのすべてがここにある:

http://ss64.com/bash/tr.html 
2

他の方法もありますが、ケースステートメントを使用しています。

read language 
case "$language" in 
([cC]) echo 'Chinese';; 
([fF]) echo 'French';; 
(*) echo 'Unrecognized language abbreviation';; 
esac 

あなたはスイッチ外の値が必要な場合は、caseで正規の割り当てを行うことができます

read language 
case "$language" in 
([cC]) lingua='zh_tw'; echo 'Chinese';; 
([fF]) lingua='fr_fr'; echo 'French';; 
(*) echo 'Unrecognized language abbreviation';; 
esac 
+0

私はいつも 'c | C)echo 'Chinese' ;;'と書かれたケースを見ていました。 –

+1

@AdamLiss:それも動作します。'本物の' Bourneシェルは、式の前に開いたかっこが好きではありません。 POSIXシェル(したがって 'bash'と' ksh')は、先頭の括弧を許可しますが、必要はありません。 'vim'の中で括弧にマッチする方が簡単だからです。角括弧は、シェルのグロビングの一部です。 –

+0

if文でこれをどのように使用できますか?たとえば – cacosud