例付きで解説!覚えておきたい便利な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 variable6. 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/ls7. test コマンド
testコマンドは条件式を評価し、その結果に応じて0または1を返します。test演算子の詳細については、bashのマニュアルページを参照してください。
#! /bin/bash
if test -z $1
then
echo "The positional parameter \$1 is empty"
fi8. 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
-
実用的な5つの例で学ぶBashスクリプト入門チュートリアル
Unix SedやUnix Awkシリーズと同様に、本シリーズではBashスクリプティングに関する記事を複数回にわたって公開します。実用的なサンプルを交えながら、Bashスクリプティングのテクニックを幅広く解説していきます。 シェルとは、ユーザーが入力したコマンドを解釈して実行するプログラムです。コマンドはユーザーが直接入力するか、「シェルスクリプト」と呼ばれるファイルから読み込まれます。 ユーザーからの入力を直接読み取る場合、そのシェルは対話型(インタラクティブ)シェルと呼ばれます。 一方、ファイルからコマンドを読み込んで実行する場合は非対話型(ノンインタラクティブ)シェルと呼ばれます。この
-
これだけは覚えておきたい!便利なWindowsコマンド12選
Windowsは、簡単な操作ですら長いコマンドを入力する必要があった旧MS-DOSと比べて、ユーザーフレンドリーな設計で広く知られています。そのため、多くのWindowsユーザーはコマンドプロンプトを敬遠しがちです。しかし、一部の重要な操作は、コマンドプロンプトからしか実行できないことをご存じでしょうか? 日頃からコマンドプロンプトのさまざまなコマンドに関する知識を持っておけば、いざというときに必ず役立ちます。この記事では、覚えておくと便利なコマンドを厳選してご紹介します。 1. ipconfig まずは「ipconfig」から。このコマンドを使えば、コンピューターのIPアドレスを簡単に確