プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話ShellScriptBash 普通のプログラミング言語での開発に慣れた人ほどシェルスクリプト、特にBashで戸惑う部分の一つに、i = 0のように空白を開ければエラーになるし、かといってif[$i!=0]のように詰めてもやっぱりエラーになる、という点が挙げられます。書きたい物を思うように書けなくて「なんだよこのクソ言語は!!!」とブチギレる人は少なくないのではないでしょうか。この記事では、そのイライラを解消するポイントをお伝えしようと思います。 以下、特に断り無く「シェルスクリプト」と書いている場合はすべて「Bashのスクリプト」という意味になります。zsh等他のシェルではまた事情が異なりますので、ご注意ください。 (※以前プログラマーの君! 騙されるな! シェルスクリプトはそう書いち
shスクリプトを作成するとき、シングルクォーテーション「'」、ダブルクォーテーション 「"」、およびバッククォート「`」 で囲う事は、それぞれ異なった意味を持ちます。 シングルクォーテーション「'」 シングルクォーテーション「'」で囲まれた文字列そのままを表します。 ワイルドカード文字「*[]」, 不等号、パイプ「|」、スペースが含まれていても文字列の一部です。 変数展開、globの展開等も抑制されます。 ダブルクォーテーション 「"」 ダブルクォーテーション 「"」で囲まれた文字列を1つの文字列として扱います。 ワイルドカード文字「*[]」, 不等号、パイプ「|」、スペースが含まれていても文字列の一部です。 しかし、変数は展開されます。 バッククォート「`」 バッククォート「`」で囲まれた文字列をコマンドとして実行した結果、標準出力にでてきた文字列をあらわします。 ただし、最後の改行文字
元々はロシア語の掲示板に出ていた、職場での小さなことをなんでも自動化していたハッカーの話が英語に翻訳され、Hacker News等で話題になっています。 xxx(ハンドル名): オーケー、ビルド担当エンジニアが転職で辞め […] 元々はロシア語の掲示板に出ていた、職場での小さなことをなんでも自動化していたハッカーの話が英語に翻訳され、Hacker News等で話題になっています。 xxx(ハンドル名): オーケー、ビルド担当エンジニアが転職で辞めちまった。本当にターミナルに住んでるようなやつだった。わかるだろ、Vimが大好きで、.dotファイルで図を描いて、Markdownでwikiに投稿するようなタイプさ… もし何か、そう何でも、90秒以上掛かるようなことがあったら、スクリプトで自動化しちゃうんだ。 xxx: そういうわけで我々はここにいて、彼の、そう、「遺産」を見てるところだ。 xxx
シェルスクリプトの中で、スペース区切りもしくはタブ区切りのレコードを扱うことがよくあると思います。 たとえば、前回のエントリ「AWS CLIとjqを使って、AWSのELBボリュームがアタッチされているEC2インスタンス名を出力するワンライナーを書いた - 双六工場日誌」のスクリプトの出力は以下のようになります。 i-ec56a9f5 vol-07d00601 servername i-ec56a9f5 vol-8f550991 servername このようなレコードの特定の列を取り出して、処理する際にどうするのが効率的か、というのがこのエントリのお題です。 非常に古い話題なので、昔からシェルスクリプトを書いている人には自明な話ではありますが、最近、シェルの標準機能の話を聞く機会がなく、失われつつある技術になってきている気がしているので、改めて確認ということで。 例として挙げたレコードから
ユーザの入力されたデータをreadコマンドで読み込む。 サンプルコード ファイル名前を入力させる 入力されたファイルを消すスクリプト。 #!/bin/sh echo "please input file name" read FILENAME rm $FILENAME サンプルコード Yes/No プロンプト #!/bin/sh echo "plz input file name" read FNAME echo "remove file ? [y/n]" read ANS if [ $ANS = 'y' -o $ANS = 'yes' ]; then echo "rm $FNAME" rm $FNAME fi 参考までにPerlで書いた場合のサンプル。 #!/usr/local/bin/perl print "plz input file name"; my $filename = <>
最近ではコンピューター、ウェブ、モバイルでゲームを楽しめるようになりました。これらのゲームプログラミングについて学びましょう。 ゲームプログラミングの特徴 ゲームプログラミングは比較的新しいジャンルです。 ゲーム開発に使用される言語は、C#、C++、JavaScript、Swift、Rubyです。ゲームでは通常のアプリケーションと異なり複雑なビジュアルを操作するパフォーマンスと速度が要求されますので、プログラム言語もそれに特化している言語がおすすめです。 ゲームプログラミングは今後も人気の職種です。習得してステップアップを目指しましょう。 Oracle PLのプログラミング言語について学びましょう。 Oracle PLの特徴 SQL、T-SQLと同様にOracle PLもデータベースを処理するための言語です。違いとしてはOracle PLは世界最大のデータベースのひとつであるOracleデ
Getting started Getting started in AppleScript Basics Recording Actions If an application supports it, recording actions allows you to quickly build up a basic AppleScript. For example, if you go into AppleScript Editor and hit the “Record” button before making a new folder, you might end up with something like: Simple Scripts Simple Scripts in AppleScript Basics AppleScript and the Command Line I
サンプルスクリプト † 入力されたファイルを消す。 #!/bin/sh echo "please input file name" read FILENAME rm $FILENAME Yes/Noプロンプト付き。 #!/bin/sh echo "plz input file name" read FNAME echo "remove file ? [y/n]" read ANS if [ $ANS = 'y' -o $ANS = 'yes' ]; then echo "rm $FNAME" rm $FNAME fi 参考までにPerlも #!/usr/local/bin/perl print "plz input file name"; my $filename = <>; `rm $filename`; ↑
使い慣れない言語でプログラムを組むと苦労しますね~ たまたま、シェルスクリプトを書くことになったのですが、grep の結果がなにも見つからなかったかどうかを判定するのにも一苦労でした(汗) 最初はこんな感じのコードを書いていました… result=`grep " (xxx) " /proc/[0-9]*/stat` if [ -n ${result} ]; then ← 空文字列かチェックしているつもり <${result}を使って何かする…> fi [ -n ${result} ] は文字列の長さが0より大きいか判定しているつもりなのですが、実際に grep の結果がなにも見つからなかった場合、これだとうまくいきませんでした…(涙) いろいろ、試行錯誤してたどりついたのは次のようなコードです。 if [ -n "${result}" ]; then ... fi ${result}をダブ
UNIX 入門 1つ1つの用語を確認しがら,UNIX の操作を学びます。例を中心に実験しながら,実際の動作を確認してください。 →[UNIX入門目次] シェル・スクリプト - Bシェル UNIX入門では,コマンド解釈装置としてのシェルを見ました。シェルには,もう1つの側面,プログラミングという側面を持ちます。実際,シェル・スクリプト(シェルのプログラム)は,UNIX の起動処理にも利用されています。そのようなシェル・プログラミングの入門です。 →[シェル・プログラミング目次] [ノート] スクリプトの例について,実行してください。また,エラーがスクリプトのどこで発生しているのかを確認したければ,コマンド sh にオプション -v を付けて実行してください。 % sh -v script
業務改革プロジェクトリーダー養成講座【第15期】 3日間の集中講義とワークショップで、事務改善と業務改革に必要な知識と手法が実践で即使えるノウハウ...
シェル変数に改行を入れる方法はどうなのかなと、調べました。 ちなみに、以下はsh限定の話です。 以下のhoge.shシェルスクリプトを実行した場合の出力は #!/bin/sh FOO="aaa bbb ccc" echo -e "$FOO" このように↓ aaa bbb ccc 改行が改行として認識されている つまり、$FOOシェル変数に入っている改行文字が、正しく出力されている。 ということで よくわかる解説っ!(平○教育委員会風) ポイント1) $FOOは以下のように宣言しても、同じ結果(改行は認識される)となる。 これでも FOO='aaa bbb ccc' これでも FOO="aaa\nbbb\nccc" これでも FOO='aaa\nbbb\nccc' 期待した結果になる! ポイント2) echo $FOO では、改行は半
Bashで追加された拡張的な変数展開 † 変数の値を切り出す(${variable:offset}、${variable:offset:length}) † ${variable:offset:length}は、変数variableに代入されている値に対して、offset番目からlength分の文字列を切り出します。 最初の文字列が0番目です。lengthを省略すると最後までとして解釈します。 ■例1:変数VARの値の2番目から6個を切り出す。 $ VAR=0123456789 $ echo ${VAR:2:6} 234567 ■例2:offsetやlength部分には算術式を指定できます。 (5-2)番目から(1+3)個分切り出す。 $ VAR=0123456789 $ echo ${VAR:(5-2):(1+3)} 3456 合致する変数名を全て表示する。(${!prefix*})
このシェルスクリプトはいったい何をやっているのでしょう? これは誰が何を実行して、どうして画面に文字が表示されるのでしょうか? ふだんなにげなく使っているコマンドでも、少し深く突っ込んでみるとLinux(UNIX)の仕組みや特徴が見えてきます。 実はechoは、「bashの内部コマンド」の1つであり、bash自身によって実行されています。意外に思われた方も多いかもしれません。なぜなら「echo」は外部コマンドとしても存在する(通常は/bin/echo)からです。でも、普通に設定されたLinuxで実行されるechoはbashの内部コマンドのほうです。試しにやってみましょう。 上は“--version”という文字列をそのまま表示するだけですが、下は“--version”を「バージョンを表示しろ」というオプションと理解して、/bin/echoのバージョンを表示してます。 このように内部コマンドの
Path: coconuts.jaist!wnoc-tyo-news!newsfeed.btnis.ad.jp!np0.iij.ad.jp!news.iij.ad.jp!rim.or.jp!tamaru-news!kuee-news!kuis-news!news.cs.ritsumei.ac.jp!odins-suita!chiba-ns!sakunami!Makino-Lab.cc.tohoku.ac.jp!not-for-mail From: hiroki@aso.ecei.tohoku.ac.jp (Hiroki Mori) Newsgroups: fj.archives.documents Subject: Csh Programming Considered Harmful (in Japanese) Supersedes: <5s83cm$rrg$1@dp-cc.cc.toho
シェルスクリプトをこうやって書いとけば? みたいな話をしてたら、「なんで書くだけで機能するんだ、さっぱり意味わからん」と言われてしまいました。それも悲しいので、とりあえずシェルスクリプトというのがどういうものか、というあたりをここに書き留めておきます。今度聞かれたら見せて終らせられるように…… シェルスクリプトとは? シェルスクリプト(shell script)とは何か、ということを知る必要がある人は、すでにUNIXやLinux等でシェル・オペレーションを行った経験があるでしょう。ふだん、cpでファイルをコピーしたり、catで内容を表示させたりしてるあれです。 しかし、補完機能があるとはいえ、たくさんの操作をいちいち手で入力するのはめんどくさいですよね? 同じような操作を何度も繰り返さなくてはならない時はなおさらです。シェルスクリプトというのは、そういったコマンド入力をまとめて書いておき、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く