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

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

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

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Q&A

解決済

2回答

1446閲覧

引数が整数でない場合に真を返すプログラムを知りたい

dentiste

総合スコア5

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

0グッド

0クリップ

投稿2020/06/15 06:55

編集2020/06/15 07:07

前提・実現したいこと

ガード節を使うため下記の、上のコードを下のコードのように書き換えたい

該当のソースコード

shell

1if expr "$1" : "[0-9]*" > /dev/null; then #引数が整数の場合は真 2 何らかの処理 3else 4 echo 引数に整数を入力してください 5fi

↑これを下記のようなプログラム↓に直したい

shell

1if 引数が整数でない場合に真を返すプログラム; then 2 echo 引数に整数を入力してください 3 exit 4fi 5何らかの処理

試したこと

Rubyなどのunlessのようなものがないか探した

補足情報(FW/ツールのバージョンなど)

cloud9を使っています

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

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

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

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

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

guest

回答2

0

質問へのストレートな回答は maisumakunさんの回答の通りですが、

sh

1if expr "$1" : ".*[^0-9]"

のように「数字以外があれば」とするのも手です。

また、Bashであれば正規表現が組み込みなので、外部コマンドを使わずとも、

Bash

1if [[ "$1" =~ [^0-9] ]] #数字以外があれば 2if [[ ! "$1" =~ ^[0-9]+$ ]] #数字だけならの否定

などと書く事もできます。

投稿2020/06/15 13:40

otn

総合スコア85901

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

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

dentiste

2020/06/18 09:20

ご丁寧にありがとうございます! 自分でも考えてみましたが、otnさんの `if [[ "$1" =~ [^0-9] ]] #数字以外があれば` が一番シンプルで良いと感じました!
guest

0

ベストアンサー

単に!でいいのではないでしょうか。

bash

1if ! expr "$1" : "[0-9]*" > /dev/null; then 2 echo 引数に整数を入力してください 3 exit 4fi

(ただし、もとの条件自体が適当でないようにも思われます)

投稿2020/06/15 07:07

maisumakun

総合スコア146018

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

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

dentiste

2020/06/15 07:19

できました!ありがとうございます。 ちなみにもとの条件自体が適当でないとは`expr "$1" : "[0-9]*" > /dev/null`この部分だと思うのですが、具体的にどこが適当でないでしょうか。
maisumakun

2020/06/15 07:27

前方一致になるので、「123.45」や「3密」のような値を入れると正しく判定されません。
dentiste

2020/06/15 07:29

ほんとですね。。 頑張って直してみます。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問