$B$N7k2L$rHf3S$7$J$5$$!#JQ?t$r(B3$B$D$KJ,$1$F?t$r?t$($J$5$$!#(B, $B%7%'%kJQ?t$NJ}$,?t$OB?$$!#4D6-JQ?t$K$7$+8=$l$J$$$b$N$OB8:_$9$k$+!#(B, (B]"> (B $B%W%H$r:n$j$J$5$$!#(B, (B]"> "$b$&0lEY(B iTerm $B$r, $B%7%'%kJQ?t$r;H$C$F! $B4D6-JQ?t$NMxMQJ}K! $B$=$l$r4JC1$K$9$k$?$a$N%7%'%k!&%9%/%j%W%H(B l2 $B$r:n@.$7$J$5$$!#(B, (B]">

$B$KMQ$$$k!#(B $B0J2(B TZ $B$r@_Dj$7$F! $ ls -l !

$B%a%?%-%c%i%/%?$r%(%9%1!

$B%7%'%k$O! platex $B%3%^%s%I! "(BPATH$B$N@h$K8+$D$+$C$?$b$N$r, history $B%3%^%s%I$O! $BDj5A$7$FDI2C$7$J$5$$!#Dj5A$7$?$b$N$K$D$$$F! $B?^(B? ~/.bashrc $B$KEPO?$9$kI,MW$,$"$k!#(B, (B]"> $ emacs run-ft, (B]"> #

(B

"(B/bin $B$K$"$k(B シェルスクリプト上ではパスを指定しないと組み込みのものが使われる。機能に差異があったりするので、実行ファイルのほうを使う場合は明示的にパスを指定するなどして区別する。7, シェル上やスクリプト実行時、直前のコマンドの終了コードは特殊変数$?に代入される。終了コードは0(ゼロ)の場合は正常終了を意味し、それ以外はエラーやそれに準ずる状態である8。, なお、ifやwhileも、0を真値、それ以外を偽値とした真偽判断を行なっている(後述testの項を参照)。, バッククォート9を使って、`command`でコマンドの実行結果を変数に格納できる。これは伝統的な構文で、最近では $(command) も使える。$()は入れ子にできる。, source は組み込みコマンドで、外部ファイルを読み込み、中に記述されているコマンドを現在のプロセスで実行する。ファイル自体は実行可能ではなくても大丈夫。 ENVIRONMENT + read NAME FLAG VALUE "%3%^%s%I%i%$%s$G$NMxMQNc$J$I!K(B, $BDj5A$NFbMF(B (~/.bashrc $B$KDI2C$7$?ItJ,(B) # $B$3$N;~E@$G$O%3%^%s%I$O8+$D$+$i$J$$(B $B;2>H!#(B, (4) $BC^GHBg3XA43X7W;;5!%7%9%F%`(B (B) (exit $B$G=*N;$9$k$H! crocus38:~ s1812345$ $B$N$h$&$K$J$C$F$$$k!#(B, $B=EJ#$7$?F~NO$rHr$1$F! "B>$N%3%^%s%I(B(ls, cp, S $B2P(B08AM 0:57.74 /opt/loca Bash 5.1 より ((~)) のクォートの取扱いが変わることに注意する必要があります。. $B%R%s%H(B1: $B%7%'%kJQ?t$X$NBeF~$O! (B), $B!V(B\$B!W(B,$B!V(B!$B!W(B, $B(B 6$B7n(B12$BF|2PMKF|(B $B$O! # hoge $HOGEがNULLの場合に"hoge"に置き換える。代入はされない。, # fuga $FUGAがNULLの場合に"fuga"に置き換え、かつ、代入もする。, # cut matched string as long as pattern can from head, while : bash: ll: command not found cd $B%3%^%s%I$N0z?t$KM?$($F!"%[! ~", (B]">

4 10 60 main-return.c $BJ8;z!V(B#$B!W0\9T!

"%P%C%/%9%i%C%7%e$G(B, $B%U%!%$%kL>$NJd405!G=$r;H$&;~$K$O!"6uGr$rBG$A9~$`$K$O! (B

$B$+$i(B1$B$DA*$s$G%7%'%k!&%9%/%j%W%H$r:n@.$7$J$5$$!#(B "(Bdate $B%3%^%s%I$NF0$-$r(B "(B drwxrwxr-x@ 3 root admin 102 6 7 09:43 /Applications/Thunderbird.app

"!V(B.$B!W$+$i;O$^$k%U%!%$%k$OI=(B Maildir/ 2018$BG/(B 6$B7n(B 6$BF|(B $B?eMKF|(B 19$B;~(B41$BJ,(B57$BIC(B EST $ # whatis -- idem, but match only commands (as whole words). "Cf4VE*$J5!3#8l(B ($B4D6-JQ?t$NI=(Blv $B$K$h$k%Z!

[ などの文字はシェルコマンドの特別な文字と見なされてしまうので、算術式としてそのまま使えません。代わりに \ でエスケープするか、算術式全体を '~' などでクォートする必要があります。, また for 文の特別な形式として for ((式1;式2;式3)) というものを使うことができます。C言語の for 文と同様に、式1 が一番初めに評価され、式2 の評価結果が真である間 for 文の中身を繰り返し実行します。ループの最後で次のループに移る前に 式3 が評価されます。, ループの継続条件 (式2) を省略した時は真と解釈され無限ループになりますので break が必要です。, Bash では for キーワードの後の空白は省略可能です (Zsh では省略できません)。, 配列を一括で初期化する時に指定する添字も算術式です: 配列名=([算術式]=値)。, 配列要素を変数展開で参照する時 ${arr[算術式]} に指定する添字も算術式です。, 配列要素を unset を用いて削除する時 unset 'arr[算術式]' に指定する添字も算術式です。, ※因みに unset に配列要素・連想配列要素を指定する時は必ず [] をクォートする必要があります (全体を囲んで "arr[~]" や 'arr[~]' の様にするか、arr\[~\] などの様にする)。クォートを忘れると、たまたま arr0 の様なファイルがカレントディレクトリにあったり、シェルのオプションで failglob や nullglob が設定されたりしている時に誤動作します。, パラメータ・変数展開では ${変数名:開始点} または ${変数名:開始点:長さ} とすることで変数の中身の部分文字列を取り出すことができます。Bash では、この時の開始点 (offset) 及び長さ (length) の部分に指定するのも算術式です。, また、配列要素の列を展開するときの offset/length も同様に算術式です。, Bash のシェル変数には整数属性を付加することができます。整数属性の付いたシェル変数に代入 (変数=算術式) を行うと、代入しようとした文字列について算術式評価が実行され、その結果が変数に格納されます。, 整数属性を付加するには declare/typeset/local/readonly コマンドに -i オプションを指定して変数を宣言します。, もちろん宣言と同時に代入をした時も算術式評価が行われます (declare -i 変数名=算術式)。, また Bash の条件コマンド [[ ~ ]] の中で整数比較の演算子 -eq, -ne, -lt, -le, -gt, -ge を使う時、その左辺・右辺は算術式評価の対象です。つまり、[[ 算術式 -eq 算術式 ]] の様になります。, 但し、test コマンドや [ コマンドの場合には、上記の演算子の引数は算術式評価の対象となりません。, この機能は長らくドキュメントに書かれていませんでしたが、Chet が 2017-03-04 に [bug-bash] Re: -eq and strings でドキュメントに書くと言いました。, 算術式中で参照した変数・配列要素の値を取り出す時にも、変数に格納された文字列に対して算術式評価が起こります。つまり、再帰的に算術式の呼び出しが起こります。, 但し、代入式 a=x の左辺に来た変数名・配列要素の場合には、中身の算術式評価は起こりません。, ただし、再帰の深さには限界があって、(現行の bash-3.0 ~ 4.4 で) 1022 段までしかできません。, 算術式を記述する文脈によって、算術式を評価する前に算術式にどのような処理が行われるかなどが異なります。, シェル展開: 記述がどの様に変換されて最終的な算術式になるかが、文脈に依って異なることに注意しなければなりません。, 記号のクォート: また記述する場所によって、シェルの特別な意味を持つ文字と区別する為にクォートが必要な記号が存在します。, 空の式: 算術式として空文字列を指定した場合の解釈は多くの場合 0 となりますが、文脈に依っては異なる意味になったり構文エラーを引き起こしたりします。, 上記の要素に従って分類すると、算術式を記述する場所は以下のような 9 パターンがあることが分かります。

(B]"> $ head apropos, (B]"> $, $B%^%K%e%"%k$N(B ENVIRONMENT $B$K5-=R$5$l$F$$$k!#(B.

-bash: ls: command not found ($B%(%i! "(B~/.bashrc $B$H$$$&L>A0$N%U%!%$%k$K$"$k%W%m%0%i%`$r(B

シェルでは伝統的に、0が正、0以外が偽である。 S 3:40PM 0:00.27 /usr/sbi $ -rwxr-xr-x 1 yas prof 41 6 15 14:41 ls-size10 $B$K!V(B.$B!W$+$i;O$^$k%U%!%$%k$@$1$rI=(B ls $B%3%^%s%I$r:n$j$J$5$$!#(B, (B]">

< を用いる。14, < Arm IPのほとんどを自由にダウンロードして試せる!?Arm Flexible Accessとは, you can read useful information later efficiently. "(B

2 saykotoeri2 ファイルが存在しない場合には > をつかっても >> を使っても新しいファイルが作られる。, -eオプション(または set -e)を使うと、エラーがあったときに処理が止まるようになる。

$ ./run-calc, (B]"> $B?t$G$"$k!#(B パラメータは空白,タブ,改行コードで区切られる.変数にこれらの値を代入するには,その値をダブルクォーテーションで囲う.x=”hoge foo”$変数名をダブルクォーテーションで囲うと,その変数の値は展開される.したがって,以下の二つの結果は等しい.echo $xecho “$x”逆に$変数名をシングルクォートで囲うとその変数の値は展開されない.したがって,以下の結果は$xである.echo ‘$x’この機能は,シングルクォートで囲った部分をBASHに解釈させたくない場合に使う.例えば,xで始まる全パッケージをインストールしたい場合は以下を実行する.echo -e ‘\a’\$変数名だと,\が$の持つ特別な意味を書き消す.したがって,以下の結果は$xである.echo \$x\もBASHに解釈させたくない特殊文字を使用するときに使う.以下の文はechoコマンドに\aを渡している.echo -e \a\aが\aだった場合はBASHがechoコマンドに渡すパラメータがaとなり,結果としてaと表示される.\aだとBASHはechoコマンドに\aを渡す.そしてビープ音が鳴る. $ lv /usr/local/lib/standard/bashrc, (B]"> $B$"$k$$$O! public_html/htdocs/index.html.en: HTML document text

$B!V(B' > ls-size$B!W(B $B$HBG$D(B) 20 50 424 cont-0.c (B $B3g8L$G3g$kJ}K!$b$"$k!#(B, $B%7%'%kJQ?t$r:o=|$9$k$K$O! $ ls, (B]"> $, (B "2a5n$N%3%^%s%I$r:F, $B%7%'%kJQ?t(B HISTFILESIZE $B$NCM$rD4$Y$J$5$$!#(B, (B]">

#!/bin/sh

$

TZ The timezone to use when displaying dates. $B?^(B? "Js9p$7$J$5$$!#(B. _mysql 218 0.0 0.5 2510832 18940 ?? $B:n@.$7$?%7%'%k!&%9%/%j%W%H$r! 53 67 1566 # add your own code below, (B

Bash のシェル変数には整数属性を付加することができます。整数属性の付いたシェル変数に代入 (変数=算術式) を行うと、代入しようとした文字列について算術式評価が実行され、その結果が変数に格納さ … -rwxr-xr-x 1 yas prof 34 6 16 15:08 run-calc (B(Emacs)$B$G(B1$B9TL\$K!V(B#!/bin/bash$B!W$+!V(B#!/bin/sh$B!W$rF~$l$k!#(B, $B40@.$7$?%3%^%s%I$r(B ~/bin $B$K0\F0$9$k!#(B, $BJ#?t9T$+$i$J$k%7%'%k!&%9%/%j%W%H$r:n@.$7$J$5$$!#$3$N>l9g! $B$h$&$J%7%'%k!&%9%/%j%W%H$,$"$k$+$rD4$Y$J$5$$!#(B, $B$=$N%W%m%0%i%`$,!"0lHL$N%W%m%0%i%`!J5!3#8l!K$+%7%'%k!&%9%/%j%W%H$+$O! $ open "/Applications/QuickTime Player.app", (B]"> $ echo $TZ, (B]">

(B, $B$$$A$$$A(B bash $B$HBG$?$J$$$G$b$$$$$h$&$K$9$k$?$a$K! $ lldir /, (B]"> AirPort Utility.app Grab.app 前提; 2. trimの方法1:sed; 3. trimの方法2:単純にechoする; 4. trimの方法3:xargsに食わせる; 5. trimの方法4:Bash組み … 75 187 1156 pipe-rw-dup.c Ss $B2P(B08AM 0:43.01 /usr/libe

$BN}=,LdBj(B $BJQ?t$H%/%)! -rw-r--r-- 1 yas prof 8574 5 15 18:24 kana.aiff (/Applications/Utilities/Terminal.app)$B$re$N%a%K%e!

total 80 fi $B$"$k$$$O! (bashではクォートがなくても大丈夫みたいです), また、コマンド置換の場合は、setopt SH_WORD_SPLIT を 設定していない 場合でも正常に代入できません。, zsh は便利だけどシェルスクリプトを書く場合はハマりポイントも多いので注意しよう。, zsh に限らず、単語分割の問題はスペースや改行が含まれない場合には問題にならないので非常に気付きづらいです。 # /local/bin:/usr/texbin $BB>$NJQ?t$HJ6$i$o$7$$;~$K$O! # add your own code below Pictures/ "%G%#%l%/%H%j(B ~/bin $B$K5/$-$J$5$$!#(B Linuxの bashで変数に値を代入、追記する方法の解説 環境変数「PATH」にパスを追記する方法 「Linuxの環境変数でパスの設定をする方法とシェル変数の扱い方を解説」の記事で、Linuxの変数を扱う方法と、環境変数「PATH」に値を追加する方法の基本的な手続き方法について解説を行いました。

bash シェルスクリプト入門 -シェルスクリプトのいろは- 意外に知らない人が多いシェルスクリプトについて、基本的な部分の解説。主に初心者をターゲットとした内容。 シェルスクリプトとは? 32 90 561 run-n.c chmod +x $B$G, (B]"> BASHスクリプトにおける変数の取扱について説明する.値の代入と参照クォート環境変数パラメータ変数配列宣言局所変数, 変数は宣言せずに使用できる.以下の文では,変数xに文字列hogeを代入している.x=hogeこのとき,等号の両側にスペースをいれてはいけない.この変数xの内容を参照するには,変数の前に$を付ける.echo $x変数の値は文字列型として扱われる.そして数値の操作をするときに数値文字列を数値に変換する.また,大文字と小文字は区別される.変数の開放にはunsetを使用する.$ x=100$ echo $x100$ unset x$ echo $x. BootPicker.app Terminal.app $B!V(B''$B!W$G$O! # HAL3_2018/01/12 12:34:56> Hello! $ echo 'open /Applications/Calculator.app' > run-calc, (B]"> http://www.coins.tsukuba.ac.jp/~yas/ -rwxr-xr-x 1 yas prof 41 6 15 14:46 lss $B4D6-JQ?t$NCV$-49$($i$l$k!#%7%s%0%k%/%)! command ``TZ=America/Los_Angeles date'' displays the current time open /Applications/Thunderbird.app 入力情報を変数に代入していた場合は先頭・末尾のtrim処理を行っておくと良いです。 Bashシェルスクリプトでtrimを実行する方法はいくつかあるので取り上げてみました。 Contents. date [-jnu] [[[mm]dd]HH]MM[[cc]yy][.ss] $B$,@_Dj$5$l$F$$$k$+$rD4$Y$J$5$$!#(B, (B]">

Ss $B2P(B08AM 0:41.42 /System/L $B%l%/%H%j$NB0@-$r4JC1$KI=(B, (B]"> "3HD%;R(B .tex $BL5$7$N%U%!%$%kL>$r, $B%R%s%H(B: $B3HD%;R(B .pdf $B$r;}$D%U%!%$%k$r(B open $B%3%^%s%I$G3+$/$H! "(Bls -ld $B%3%^%s%I$N0z?t$KM?$($F, (B]"> "%3%^%s%I$,B8:_$9$k%G%#%l%/%H%j$rJ];}$7$F$$$k4D6-JQ?t$G$"$k!#(B, (B]"> # License as specified in the README file that comes with the man + read NAME FLAG VALUE root 1 0.0 0.0 2456708 1356 ?? 2018$BG/(B 6$B7n(B 7$BF|(B $BLZMKF|(B 04$B;~(B56$BJ,(B51$BIC(B BST < > | $ { } ( ) [ ] & ; ^ " * ? $B%^%s%I$r;H$&!#(B, (B]"> *$B!W$H$$$&%Q%?%s$GC5$9!#(B, $BJ}K!#2(B: ls $B$K(B -a $B%*%W%7%g%s$rIU$1$k$H! "BG$A9~$^$l$?%3%^%s%I$r4D6-JQ?t(B PATH $B$NCf$+$iC5$7$F, (B "(B, 1$B9TL\$K%F%-%9%H!&%(%G%#%?$G!V(B#!/bin/bash$B!W$r=q$-2C$($k!#(B, (B]">$B!W$H=q$-2C$($k!#(B)

$B$9$k2]Bj$G$"$k!#C1$K(B echo $B%3%^%s%I$KBP$7$F$3$N$h$&$JJ8;zNs$rM?$($l$P$h(B $ cp ls-size10 lss, (B]"> $

PATH $B0J30$K$I$N$h$&$J(B (B(` `)$B$G3g$C$?ItJ,(B $B$-$k!#$3$N2]Bj$G$bB>$N%W%m%0%i%`$r;H$C$F$b$h$$!#(B, ls $B%3%^%s%I$d(B bash $B$N(B * $B$G$O! "a": 123,

"JB$YBX$($J$5$$!#(B, $B:#F|$N2]Bj$G$O!

/Applications/Utilities $B$NFbMF$rI=(B, $B@5(B: %y $BG/(B($B@>Nq$N>e(B2$B7e(B,$B>.J8;z(B), $B$&$^$/$$$1$P! (B) $ lss 10 . ただし、 -c オプションをつけるとよい。そうでないと、変換できない文字に遭遇した場合に処理が止まってしまうので。, \uXXXXのようにUnicodeエスケープされた文字列をさくっとアンエスケープしたい時のワンライナー。とりあえずPerlとPythonを使ったの例。 "(B lldir $B$r:n@.$7$F! 1 saykotoeri2 /home/prof/yas $ bash $B$N5!G=$G! しかしながら、他のプログラム言語ではみられない記法があったり、逆に似た書き方もあったりと、混乱しがちなのもシェルスクリプトの特徴かもしれない。, スクリプト行頭の#!で始まる行をシェバング(シェバン、シバンとも)といい3、なんのプログラムで実行すべきかを指し示すことができる。シェルスクリプトの場合は、次のような形になるだろう。, スクリプトファイルに実行パーミッションを設定して直接実行すると、シェルはこの1行目を見て該当するコマンドを用いてスクリプトファイルを実行する。, ほとんどのLinuxのshはbashへのリンクとなっている4が、シェバングがshで実行されようとしている場合には、Bashはできるだけshの動作をしようとする。その結果Bash独自の記法が一部使えなくなるので注意だ。(こちらの解説が参考になる。), 任意の文字列を使った変数が作れる5。参照時には$をつけるが、代入する際は$を使わない。代入は=を用いる。

/bin/ls $B$r, $BJ#?t$N%3%^%s%I$,$_$D$+$l$P!

# $B4D6-JQ?t(BPATH $B%7%'%kJQ?t(B PS1 $B$O! drwx------ 14 yas prof 4096 4 26 12:27 /home/prof/yas/Library/Application Support "Hf3S$7$F$$$k%U%!%$%k$NL>A0$rI=(B $BM>M5$,$"$l$P! 7 expectを使って自動でSSHログインした後にコマンドを実行したいと 8 lprコマンド(印刷)を実行すると、lprコマンド実行ログを取るように 9 コマンドの結果を変数へ代入@シェルスクリプト 10 コマンドの戻り値を変数に代入したい (B

500 history "(B1$B9T$+$i$J$k%(%$%j%"%9$rDj5A$7$J$5$$!#(B, (B

"%P%$%H?t$rI=(B

3 fg

.

. $B$3$NNc$G$O(BPATH $B$NFbMF$,$+$J$j8BDj$5$l! | curl -sS -X POST -d @- http://example.com/boopoo, { '%7%'%k$N%W%m%s%W%H(B($ ) $B$H4V0c$($J$$$3$H!#%7%'%k$N%W%m%s%W(B $ $B7PEY$NI8=`$+$i$:$l$F$$$k$3$H$b$"$k!#(B, $B%R%s%H(B: $B2hLL$KET;TL>$rI=(Becho $B%3%^%s%I$,;H$($k!#(B, ls -l $B$K%G%#%l%/%H%jL>$rM?$($k$H$=$NFbMF$,I=(B-d $B%*%W%7%g%s$rIU(B