質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Q&A

解決済

3回答

1174閲覧

Linuxのシェルスクリプトでの正規表現の表し方

orangetea

総合スコア14

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

0グッド

1クリップ

投稿2020/10/03 02:15

Linuxで下記を実現させるコードが書きたいです。

・実行すると、ageとして年齢の入力を促される
・20以上の値を入れると、you can drinkと出力される
・20以下の値を入れると、you cannot drinkと出力される

↓が私の作ったシェルスクリプトです。

while true do echo "age" read input case $input in >19 )echo "you can drink" ;; <20 )echo "you cannot drink" ;; esac done ```恐らくというか確実に>19と<20の部分が間違っていると思われます。 初心者のため、すごく基本的な質問になってしまい申し訳ないですが、直し方をご返答していただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

とりあえず、[ (test)を使うやつも書いておきますね。

bash

1 if [ "$input" -ge 20 ]; then 2 echo "you can drink" 3 else 4 echo "you cannot drink" 5 fi

投稿2020/10/03 02:35

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「if [ 条件式 ]」構文を使います。「man [」または「man test」を参照してください。
「2>/dev/null」の部分は、数値以外の文字列が渡された時に出るエラーメッセージを画面に出力しないようにしています。

terminal

1$ cat hoge.sh 2#! /bin/sh 3 4while true 5do 6 echo "age" 7 read input 8 if [ "$input" -ge 20 ] 2>/dev/null 9 then 10 echo "you can drink" 11 else 12 echo "you cannot drink" 13 fi 14done 15 16$ ./hoge.sh 17age 1819 19you cannot drink 20age 2120 22you can drink 23age 240x30 25you cannot drink 26age 27hatachi 28you cannot drink 29age 30^C

投稿2020/10/03 02:34

hidezzz

総合スコア1248

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

caseの条件部分に書くのは、正規表現では無いです。ワイルドカードとかファイルマッチとかglobとかいうもの。コマンドラインでファイル名の指定に使うものと同じです。rm *.bakとか。

また、正規表現であっても、ワイルドカードであっても、数値の大小比較はできません。あくまで、「パターンにマッチするかどうか」です。

caseで書くなら、あり得るパターンをOR(|)で列挙します。

sh

1 case "$input" in 2 [2-9][0-9]|[1-9][0-9][0-9]) echo "you can drink" 3 ;; 4 [0-9]|1[0-9]) echo "you cannot drink" 5 ;; 6 *) echo "It is not Number" 7 ;; 8 esac

あるいは、if [ "$input" -lt 20 ]みたいにするかですが、数字でないときにエラーになるので、それを事前にチェックする事を考えると、上記caseの方が良いですかね。

投稿2020/10/03 02:29

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2020/10/03 02:43

数字かどうかチェックするとすると、Bash/Zshで、 if [[ "$input" =~ ^[0-9]+$ ]] then if [ "$input" -ge 20 ] then echo "you can drink" else echo "you cannot drink" fi else echo "It is not Number" fi
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問