Bashプログラミング
 Computer >> コンピューター >  >> プログラミング >> Bashプログラミング

例付きで解説!覚えておきたい便利なBashシェル組み込みコマンド15選

例付きで解説!覚えておきたい便利なBashシェル組み込みコマンド15選

Bashには、シェル自体に組み込まれている(ビルトイン)コマンドが多数存在します。

組み込みコマンドを実行すると、Bashシェルは他のプログラムを呼び出すことなく、即座にそのコマンドを実行します。

外部コマンドは通常、実行時にプロセスをフォークする必要があるため、組み込みコマンドの方が高速に動作します。

この記事では、実用的なBashシェル組み込みコマンドを、具体例とともに15個紹介していきます。

1. export コマンド

exportコマンドは、変数や関数を、現在のシェルから起動されるすべての子プロセスの環境へエクスポート(引き継ぎ)するために使用します。

export varname=value
export -f functionname # 現在のシェルの関数をエクスポートします。

変数や関数を値とともにエクスポートします。「env」コマンドはすべての環境変数を一覧表示します。次の例では、envがエクスポートされた変数を表示しているのがわかります。

$ export country=India

$ env
SESSIONNAME=Console
country=India
_=/usr/bin/env

「export -p」コマンドでも、現在のシェルでエクスポートされているすべての変数を表示できます。

2. eval コマンド

evalコマンドは、与えられたすべての引数を結合し、その式を評価して実行し、実行したコマンドの終了ステータスを返します。

$ cat evalex.sh
if [ ! -z $1 ]
then
proccomm="ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | grep $1"
else
proccomm="ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu"
fi
eval $proccomm

上記のコードは引数を受け取り、それをgrepコマンドの検索パターンとして利用します。CPU使用率の順にプロセスを一覧表示しつつ、コマンドラインで指定した特定のパターンで結果を絞り込むことができます。

注: この記事は、連載「Bashチュートリアルシリーズ」の一部です。

3. hash コマンド

hashコマンドは、使用したコマンドのパス名を記録するハッシュテーブルを管理します。コマンドを実行するとき、シェルはまず$PATH変数の中を検索します。
しかし、そのコマンドがハッシュテーブルに登録されていれば、そこからパスを取得して実行します。ハッシュテーブルには、そのシェルでこれまでに使用した各コマンドのヒット回数も記録されています。

$ hash
hits    command
   1    /usr/bin/cat
   2    /usr/bin/ps
   4    /usr/bin/ls

-dオプションを使うと特定のコマンドをハッシュテーブルから削除でき、-rオプションでハッシュテーブル全体をリセットできます。

$ hash -d cat
$ hash
hits    command
   2    /usr/bin/ps
   4    /usr/bin/ls

4. pwd コマンド

pwdは、現在の作業ディレクトリを表示するシェル組み込みコマンドです。基本的には、組み込み変数${PWD}の値を返します。

$pwd
/home/sasikala/bash/exercises

$echo $PWD
/home/sasikala/bash/exercises

5. readonly コマンド

readonlyコマンドは、変数や関数を読み取り専用としてマークするために使用します。読み取り専用に設定された変数は、以後変更することができません。

$ cat readonly_ex.sh
#!/bin/bash
# 配列を読み取り専用に制限する
readonly -a shells=("ksh" "bash" "sh" "csh" );
echo ${#shells[@]}

# 配列を変更しようとすると、エラーが発生する
shells[0]="gnu-bash"

echo ${shells[@]}

$ ./readonly_ex.sh
4
readonly_ex.sh: line 9: shells: readonly variable

6. shift コマンド

shiftコマンドは、位置パラメータを左にN回分シフトし、シフト後に変数の対応関係を付け直すために使用します。

$ cat shift.sh
#! /bin/bash

while [ $# -gt 0 ]
do
        case "$1" in

        -l) echo "List command"
            ls
    	    shift
            ;;
	-p) echo "Process command"
    	    ps -a
    	    shift
    	    ;;
	-t) echo "Hash Table command"
    	    hash
    	    shift
    	    ;;
	-h) echo "Help command"
    	    help
    	    shift
	    ;;
	esac
done

$./shift.sh -l -t
List command analysis  break  testing t1.sh temp Hash Table command
hits    command
   1    /usr/bin/ls

7. test コマンド

testコマンドは条件式を評価し、その結果に応じて0または1を返します。test演算子の詳細については、bashのマニュアルページを参照してください。

#! /bin/bash

if test -z $1
then
        echo "The positional parameter \$1 is empty"
fi

8. getopts コマンド

getoptsコマンドは、指定されたコマンドライン引数を解析するために使用します。オプションごとのルール(どのオプションが引数を取るか、取らないか)を定義できます。getoptsコマンドでは、オプション文字の後にコロン(:)が続く場合、そのオプションは引数を必要とすることを意味します。

getoptsは、$OPTIND(次に処理するパラメータのインデックス)と$OPTARG(オプションの引数)という2つの変数を提供します。

$ cat options.sh
#! /bin/bash

while getopts :h:r:l: OPTION
do
         case $OPTION in
          h) echo "help of $OPTARG"
             help "$OPTARG"
             ;;
          r) echo "Going to remove a file $OPTARG"
             rm -f "$OPTARG"
            ;;
         esac
done

$ ./options.sh -h jobs
help of jobs
jobs: jobs [-lnprs] [jobspec ...] or jobs -x command [args]
    Lists the active jobs.  The -l option lists process id's in addition
    to the normal information; the -p option lists process id's only.

9. logout コマンド

logout組み込みコマンドは、現在のシェルを終了するために使用します。

10. umask コマンド

umaskコマンドは、現在のプロセスに対するファイルモード作成マスクを設定します。ユーザーがファイルを作成するとき、デフォルトのパーミッションはumaskに設定された値に基づいて決まります。ファイルのデフォルトパーミッションは666であり、ユーザーがファイルを作成する際にumaskのビットによってマスクされます。

詳細については、「ファイルとディレクトリのパーミッション」に関する記事を参照してください。

ユーザーがファイルを作成すると、666が022でマスクされるため、デフォルトのファイルパーミッションは644になります。

$ umask
0022

$ > temporary

$ ls -l temporary
-rw-r--r-- 1 root root 4 Jul 26 07:48 temporary

11. set コマンド

setはシェル組み込みコマンドで、シェルの内部変数を設定・変更するために使用します。引数なしでsetコマンドを実行すると、すべての変数とその値が一覧表示されます。また、setコマンドは位置パラメータに値を設定するためにも使用できます。

$ set +o history # 履歴の保存を無効にします。
+o は指定されたオプションを無効にします。

$ set -o history
-o は履歴機能を有効にします

$ cat set.sh
var="Welcome to thegeekstuff"
set -- $var
echo "\$1=" $1
echo "\$2=" $2
echo "\$3=" $3

$ ./set.sh
$1=Welcome
$2=to
$3=thegeekstuff

12. unset コマンド

unset組み込みコマンドは、シェル変数にnull(空)を設定するために使用します。unsetは、配列の要素を削除したり、配列全体を削除したりするためにも使えます。

Bash配列の詳細については、以前の記事「Bash配列操作15選」を参照してください。

$ cat unset.sh
#!/bin/bash
# 値を代入して表示する
var="welcome to thegeekstuff"
echo $var

# 変数をunsetする
unset var
echo $var

$ ./unset.sh
welcome to thegeekstuff

上記の例では、変数をunsetした後、「var」には空文字列(null)が割り当てられます。

13. let コマンド

letコマンドは、シェル変数に対して算術演算を実行するために使用します。

$ cat arith.sh
#! /bin/bash

let arg1=12
let arg2=11

let add=$arg1+$arg2
let sub=$arg1-$arg2
let mul=$arg1*$arg2
let div=$arg1/$arg2
echo $add $sub $mul $div

$ ./arith.sh
23 1 132 1

14. shopt コマンド

shopt組み込みコマンドは、シェルオプションを設定・解除するために使用します。このコマンドを活用することで、シェルの高度な機能を利用できるようになります。

$cat shopt.sh
#! /bin/bash

## xpg_echo を有効にする前
echo "WELCOME\n"
echo "GEEKSTUF\n"
shopt -s  xpg_echo
## xpg_echo を有効にした後
echo "WELCOME\n"
echo "GEEKSTUF\n"

# エイリアスを無効にする前
alias l.='ls -l .'
l.

# エイリアスを無効にした後
shopt -u expand_aliases
l.

$ ./shopt.sh
WELCOME\n
GEEKSTUF\n
WELCOME

GEEKSTUF

total 3300
-rw------- 1 root root    1112 Jan 23  2009 anaconda-ks.cfg
-r-xr-xr-x 1 root root 3252304 Jul  1 08:25 backup
drwxr-xr-x 2 root root    4096 Jan 26  2009 Desktop
shopt.sh: line 17: l.: command not found

xpg_echoオプションを有効にする前は、echo文はエスケープシーケンス(\nなど)を展開しませんでした。「l.」はカレントディレクトリの「ls -l」へのエイリアスです。シェルでexpand_aliasesオプションを無効にすると、エイリアスが展開されなくなり、「l.: command not found」というエラーが発生することが確認できます。

15. printf コマンド

C言語のprintfと同様に、bashのprintf組み込みコマンドは、書式を整えた出力を行うために使用します。

例13のスクリプトは、2つの入力値に対して算術演算を行います。そのスクリプトでは、echo文の代わりにprintf文を使って、以下のように整形された出力を表示できます。

arith.shのecho文を、次のprintf文に置き換えてみましょう。

printf "Addition=%d\nSubtraction=%d\nMultiplication=%d\nDivision=%f\n" $add $sub $mul $div

$ ./arith.sh
Addition=23
Subtraction=1
Multiplication=132
Division=1.000000
  1. 実用的な5つの例で学ぶBashスクリプト入門チュートリアル

    Unix SedやUnix Awkシリーズと同様に、本シリーズではBashスクリプティングに関する記事を複数回にわたって公開します。実用的なサンプルを交えながら、Bashスクリプティングのテクニックを幅広く解説していきます。 シェルとは、ユーザーが入力したコマンドを解釈して実行するプログラムです。コマンドはユーザーが直接入力するか、「シェルスクリプト」と呼ばれるファイルから読み込まれます。 ユーザーからの入力を直接読み取る場合、そのシェルは対話型(インタラクティブ)シェルと呼ばれます。 一方、ファイルからコマンドを読み込んで実行する場合は非対話型(ノンインタラクティブ)シェルと呼ばれます。この

  2. これだけは覚えておきたい!便利なWindowsコマンド12選

    Windowsは、簡単な操作ですら長いコマンドを入力する必要があった旧MS-DOSと比べて、ユーザーフレンドリーな設計で広く知られています。そのため、多くのWindowsユーザーはコマンドプロンプトを敬遠しがちです。しかし、一部の重要な操作は、コマンドプロンプトからしか実行できないことをご存じでしょうか? 日頃からコマンドプロンプトのさまざまなコマンドに関する知識を持っておけば、いざというときに必ず役立ちます。この記事では、覚えておくと便利なコマンドを厳選してご紹介します。 1. ipconfig まずは「ipconfig」から。このコマンドを使えば、コンピューターのIPアドレスを簡単に確