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

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

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

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

3回答

6621閲覧

シェルスクリプトにおけるキーワードによる分岐

papachiropa

総合スコア15

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2020/10/05 05:09

systemctl status sshdの実行結果により表示される文字列が変わるシェルを作成したいです。

実行結果が
active→「sshdは起動しています。」と表示させる。
inactive→「sshdは起動していません。」と表示させる。

case文を使って下記のように書いて実行したのですが
activeなのに「sshdは起動していません。」と表示されます。
アドバイス頂けるとありがたいです。宜しくお願い致します。

SHELL

1#!/bin/bash 2 3case `systemctl status sshd` in 4 "*Active: active*") 5 echo sshdは起動しています。 6 ;; 7 *) 8 echo sshdは起動していません。 9 ;; 10esac

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

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

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

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

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

TaichiYanagiya

2020/10/05 05:14

"systemctl is-active sshd" じゃダメなの? また、文字列よりも戻り値で判断した方が確実と思います。
papachiropa

2020/10/05 08:02

systemctl is-active sshdがいいですね。ありがとうございます。
guest

回答3

0

元のコードは、*をクォートしているので、「任意の文字列」じゃなくて「ちょうど*1文字」にマッチします。

sh

1 *Active:" "active*)

と、空白だけクォートすれば良いです。

投稿2020/10/05 11:01

otn

総合スコア85901

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

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

papachiropa

2020/10/06 00:52

アドバイスありがとうございます。
guest

0

変な日本語化スクリプトは書かない方が良い。

貴殿の上司がバカなのでしょうが、
システムの出力を人間の浅知恵で加工するべきでは
ありません。

英語は英語のまま出力し、
後から意味を考察すべきです。

まじで、大変な事に繋がる可能性があります。
※英語出力のバリエーションをすべて網羅していますか?
どんな時でも、正確に翻訳できるノウハウはありますか?
設定で登録した翻訳以外のメッセージの出力があったらどうしますか?

投稿2020/10/05 12:40

hana_yama_san

総合スコア923

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

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

papachiropa

2020/10/06 00:54

アドバイスありがとうございます。周りと相談してみます。
guest

0

ベストアンサー

systemctl is-activeは指定したユニットのどれかひとつでもがアクティブなら、終了コード0を返す。そうでないときは、ゼロ以外を返します。
よって、終了コードで判定しメッセージを出し分ければいいです。

bash

1#!/bin/bash 2systemctl --quiet is-active sshd && echo "sshdは起動しています。" || echo "sshdは起動していません"

投稿2020/10/05 06:59

Y.H.

総合スコア7918

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

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

papachiropa

2020/10/05 08:03

ありがとうございました。助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問