タグ

shellscriptに関するJohn_Kawanishiのブックマーク (72)

  • シェル芸の可読性を向上させるマルチライナー記法のススメ - Qiita

    マルチライナー記法とは? マルチライナー記法とは、その名の通りシェル芸をワンライナーではなくマルチライナー(複数行)で書くことです。長すぎる行をワンライナーで書くと以下のように横スクロールが必要になって非常に読みにくくなります。(コードは Convert long single line command to a bash shell script より借用。長いコードとして利用しているだけで中身に意味はありません)。マルチライナー記法はこのようなワンライナーを読みやすく書くことです。 nice --20 iperf3 -c somelocation.com -f k | while IFS= read -r line; do echo "$(date) $line"; done | tee onespeed.txt | tee -a speeds.txt; sleep 30 ;cat o

    シェル芸の可読性を向上させるマルチライナー記法のススメ - Qiita
  • シェルスクリプトとの対比で理解するPythonのsubprocess - 朝日ネット 技術者ブログ

    はじめに 開発部の ikasat です。 皆さんは git, ssh, rsync のような外部コマンドを呼び出すスクリプトを書きたくなったことはありますか? 個人的にこの類のスクリプトは最初はシェルスクリプトとして書くのですが、改修を重ねるうちに肥大化して処理も複雑になり、 後から Python のような汎用プログラミング言語で書き直すことがよくあります。 外部コマンド呼び出しを書き直す際に、Git 操作のために pygit2、 SSH 接続のために paramiko のようなライブラリをわざわざ使うのは大がかりだったり、 rsync に相当するようなこなれたライブラリが存在しなかったりする場合があります。 そのような時は標準ライブラリの subprocess モジュールを利用し、Python から外部コマンドを呼び出すことになるでしょう。 しかしながら、Python のチュートリアルペ

    シェルスクリプトとの対比で理解するPythonのsubprocess - 朝日ネット 技術者ブログ
  • 【脱sed】いい加減シェルスクリプトで文字列をsedで置換するなんてやめよう - Qiita

    はじめに もう文字列の置換で sed コマンド使うの禁止して良いんじゃないですかね? 言いすぎだとわかってあえて言っていますが。 悪い書き方(外部コマンドに頼る方法) # 変数 line に入ってる文字列を echo コマンドで出力して sed コマンドに渡し、 # sed の s コマンドで "from" を "to" に置換して出力したものを ret 変数で受け取る ret=$(echo "$line" | sed "s/from/to/")

    【脱sed】いい加減シェルスクリプトで文字列をsedで置換するなんてやめよう - Qiita
  • さくらインターネット、会員登録不要で無償利用可能なオンラインシェル環境 「さくらのクラウドシェル」を2023年5月25日より提供開始 | さくらインターネット

    さくらインターネット、会員登録不要で無償利用可能なオンラインシェル環境 「さくらのクラウドシェル」を2023年5月25日より提供開始 クラウドコンピューティングサービスを提供するさくらインターネット株式会社(社:大阪大阪市、代表取締役社長:田中 邦裕)は、ブラウザから無料で利用できるシェル環境「さくらのクラウドシェル」の提供を2023年5月25日より開始します。 「さくらのクラウドシェル」はオンラインのシェル環境で、すでに開発者向けの環境がインストールされているため、ご自身の環境に手を加えることなくすぐに利用することができます。 基機能は会員登録不要のプランにて利用可能です。また、必要に応じて会員IDを利用することでアクセス制限を緩和することが可能です。それに伴い、デプロイ・リリース用サーバとしての利用や外部I/Fを利用するようなプログラミング環境としての利用など柔軟に利用できます。

    さくらインターネット、会員登録不要で無償利用可能なオンラインシェル環境 「さくらのクラウドシェル」を2023年5月25日より提供開始 | さくらインターネット
    John_Kawanishi
    John_Kawanishi 2023/05/26
    所謂サーバーレス!?
  • Bashを学べる全20回の入門動画 MicrosoftがYouTubeで無料公開

    Microsoft2023年2月21日(米国時間)、初学者向けにBashを解説する全20回の動画シリーズ「Bash for Beginners」をYouTubeで公開した。 開発者向けQ&Aサイト「Stack Overflow」が2022年に実施した開発者調査でも、Bashは最も人気のある技術の7位に選ばれている。Bashは汎用(はんよう)性の高い強力なスクリプト言語であり、タスクの自動化、ファイルの管理、クラウド環境での作業などさまざまな領域で利用されている。 なぜBashの学習が他のスキルに役立つのか 関連記事 未経験者に「プログラミング言語」は求めない 調査で分かった企業が期待するスキルとは パーソルキャリアは、「doda ビジネスパーソンと企業の転職意識ギャップ調査」の結果を発表した。それによるとITエンジニア職「未経験歓迎」求人の割合は2年前(2021年1月)に比べて約3.0倍

    Bashを学べる全20回の入門動画 MicrosoftがYouTubeで無料公開
  • Bash / PowerShell / Pythonの変数の扱い・処理の違いを確認する - Qiita

    3つのスクリプト型言語の変数の違いを理解する Shell Script : Linuxを運用する上では必須 PowerShell : 主にWindowsで利用。オープンソース化でLinuxmacOSでも使える Python : データ分析AI/ML系で人気のスクリプト 環境に合わせて3つのスクリプト型言語を使っていると、色々混乱してくるので忘備録を兼ね、まとめてみた。 変数の宣言・定義 User:~$ name='Mash' User:~$ echo $name Mash User:~$ name=Mash User:~$ echo $name Mash User:~$ $name コマンド 'Mash' が見つかりません。 Shell Script 変数名と値の間の "=" の両脇にスペースを入れてはダメ 変数の値が文字の時でも、クォーテーションの有る無しに関わらず定義可能 変数 $

    Bash / PowerShell / Pythonの変数の扱い・処理の違いを確認する - Qiita
  • 『マスタリングLinuxシェルスクリプト 第2版』、こういう1冊手元に有るとずっと使える本はちゃんと買っておきたいですね - Magnolia Tech

    マスタリングLinuxシェルスクリプト 第2版 ―Linuxコマンド、bashスクリプト、シェルプログラミング実践入門 作者:Mokhtar Ebrahim,Andrew MallettオライリージャパンAmazon 令和最新版のシェルスクリプトの入門書とリファレンスがセットになった1冊。手元に置いておくと安心感ありますよね。 令和最新版なので、冒頭からデバッグしたいならVisual Studio Code がオススメ、と出てきます。 コンテナ使おうと思ったらシェルスクリプトの読み書きの出番がどんどん増えていって、コンテナに一番必要なスキルはシェルスクリプトのスキルでは?と思っている今日この頃です(違います)が、そのくらいの用途に必要な要素は全部盛り込んであり、シェルスクリプトの文法と実践的な使い方に加えて、一緒に利用されることの多いgrep、awk、sedといったコマンドの解説も併せて載

    『マスタリングLinuxシェルスクリプト 第2版』、こういう1冊手元に有るとずっと使える本はちゃんと買っておきたいですね - Magnolia Tech
  • 今どきのシェルスクリプトは数値計算にexprを使わない(POSIX準拠) - Qiita

    はじめに 1992 年に POSIX でシェルが標準化されて以来、シェルスクリプトの数値計算に expr コマンドは使いません。expr コマンドを使って計算していたのは Bourne シェル(古い UNIX の sh)時代の話で、現在の POSIX sh (dash、bash、ksh 等)時代では数値計算に expr コマンドは不要です。今どきはシェルの機能だけで整数の計算を行うことができます。「今どき」って一体いつからだって話なわけですが……。 注意 シェルスクリプトでパフォーマンスの話をするとすぐに「他の言語で〜」という方がいますが、私はどんなことにでもシェルスクリプトを使えなんて一言も言っていません。パフォーマンスを気にしている理由は、そこが実際にシェルスクリプトのボトルネックになるポイントだからです。そもそもシェルスクリプトと一般的な言語は言語設計レベルで得意なことが違います。ユ

    今どきのシェルスクリプトは数値計算にexprを使わない(POSIX準拠) - Qiita
  • シェルスクリプトで安全簡単な二重起動防止・排他/共有ロックの徹底解説 - Qiita

    はじめに シェルスクリプトで二重起動防止やロックをする方法を検索すると、いろいろな方法や書き方が見つかりますが、どれを使えばよいのか、当に正しく動くのか、不安になりますよね? ディレクトリ (mkdir) やシンボリックリンク (ln) を使った独自実装の例も見かけますが、エラー発生時や予期せぬ電源断、CTRL+C で止めたときなどでも問題は発生しないのでしょうか? まず、ディレクトリやシンボリックリンクを使った独自実装はしない。これを肝に銘じてください。シェルスクリプトでのロック管理はとても難しく、一般的な排他制御の知識に加えて、シェルスクリプト特有の問題、シグナルやトラップ、サブシェルや子プロセスの問題、さらには特定のシェル固有の仕様やバグなどさまざまな問題に対処する必要があり大変です。独自実装の例では古いロックファイルが残ってしまい、それをいつどのタイミングで片付ければ安全なのか?

    シェルスクリプトで安全簡単な二重起動防止・排他/共有ロックの徹底解説 - Qiita
  • ただ15行のシェルスクリプトで個人ナレッジマネジメントツールを作った話

    はじめに 自分が読んだや記事などを読む時に書いたノートを体系的に管理したいですよね。 現在優秀なナレッジマネジメントツールはありふれています。企業向けだと Confluence DocBase Qiita Team などがあります。個人向けは Notion HackMD Boost Note のようなシンプルで使いやすいツールがあります。マインドマップツールをさらに含めると数え切れません。 筆者自身はミニマリストです。 コードのようにGithubで自分のノートを管理したい Webからマインドマップ形式になっているノートを確認したい サブスクではなく、無料で使いたい なので、個人ナレッジマネジメントツールを自作したいという発想に至りました。 結果としては下記の15行シェルスクリプト、GitHub ActionsとMarkdownマインドマップ変換ツールmarkmapで作りました。 項目をク

    ただ15行のシェルスクリプトで個人ナレッジマネジメントツールを作った話
  • なぜ今シェルスクリプトを学ぶのか・シェルスクリプトのTips - 理系学生日記

    会社の中でシェルスクリプトについての話をすることにしたので、このエントリはそのためのものです。 個人的な好みとかもいろいろ入ってしまっているので、そのあたりは取捨選択してください。 なぜ今シェルスクリプトを学ぶのか 公開されているSREをマルっとPDF化する SpotBugsのViolationレポートをMerge Requestのコメント投稿する ぼくの互換性についての考え方 何で書くか シェルスクリプトをうまく書くには ShellCheckを使う バッドパターンとその修正 line-by-lineの処理が多い lsを使う ls /directory | grep mystring ls | grep -v 'log$' lsの結果をループさせる 良いシェルスクリプトを書くためのTIPS set -euする 文字列は基的にクオートする 局所変数にはlocalを使う 定数は読み取り専用

    なぜ今シェルスクリプトを学ぶのか・シェルスクリプトのTips - 理系学生日記
  • 【シェル】外部ファイルを配列に読み込んで一行ずつ処理する方法

    外部ファイルとなるファイルリストを読み込んで、一行ずつ処理を実行するシェル・スクリプトを作成する必要が出てきましたのでその方法をメモ的にご紹介です。 処理の流れ 処理は単純です。 まずは区切り文字の環境変数を IFS で指定。 続いて 配列=(‘cat 外部ファイル’) とすれば「配列」に一行ずつ外部ファイルの中身が格納されます。 最後に for文 で配列を全てまわして処理すればOKです。 シェルの中身 シェルの中身はこのような感じになります。 実行結果 このような感じで実行されます。

    【シェル】外部ファイルを配列に読み込んで一行ずつ処理する方法
  • シェルスクリプトは ((i=i+1)) ではなく i=$((i+1)) で計算しなければいけない!という話 - Qiita

    count=0 max=5 while ((count < max)); do # (( 算術式 )) は条件文で使うものです count=$((count + 1)) # 計算したいだけなら算術式展開を使います echo "$count" done ついでに言うと (( 算術式 )) は POSIX シェルで規定されていません。bash、ksh、mksh、zsh では使えますが dash、yash などの純粋な POSIX シェルに近いシェルでは使えません。 なぜ? (( 算術式 )) を使って変数に値を代入したり変更することができますが、それだけのために使ってはいけません。if や while などの条件文とともに使うものです。 C 言語を使ってる人なら比較的見かける書き方だと思いますが、(( 算術式 )) で値を変えるというのは、以下のように評価するついでに値も変えちゃえと、短く書く

    シェルスクリプトは ((i=i+1)) ではなく i=$((i+1)) で計算しなければいけない!という話 - Qiita
  • シェルスクリプトの変数はダブルクォートしなければいけない!という話 - Qiita

    TL; DR 変数をダブルクォートしない使い方は上級者向けの危険な機能です! $@ と $*(または配列の全要素)をダブルクォートしない使い方は知る必要すらありません! ShellCheck を導入すれば誰でも簡単に正しい書き方がわかります!! 2021-08-21 補足 この記事は dash や bash などの POSIX シェルの一般的な動作を解説しており zsh のデフォルトとは異なります。記事の中でも説明していますが zsh の場合はシェルのオプションを変更することで POSIX 準拠の動作に変更することができます。zsh に関しては後半の「zsh に関する注意点」も参照してください。 はじめに プログラミング言語は、言語によって記号の意味が異なることがよくあります。クォーテーションマークはその一つです。C 言語ではシングルクォートは文字リテラル(一文字)を意味し文字列はダブルク

    シェルスクリプトの変数はダブルクォートしなければいけない!という話 - Qiita
  • シェルスクリプトを書くときにいつもやるやつを調べた

    bash のシェルスクリプトを書くときに、いつも脳死で以下をやっている。(同僚が整備してくれたものをコピペしている) エディタなり CI で shellcheck をまわす set -euxo pipefail と冒頭に書く こんな感じ #!/bin/bash set -euxo pipefail いつまでもコピペではさすがにアレなので、意味を調べたメモ。 shellcheck koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts イケてない書き方に警告を出してくれる それぞれの警告にはエラーコード割り振られていてとても便利 エラーコードごとに正誤例、解説が書かれているのでわかりやすい SC1000 の例 CI もそうだし、エディタのプラグインも充実 しているのでとりあえず入れておくと良い set

    シェルスクリプトを書くときにいつもやるやつを調べた
  • 終了ステータス - UNIX & Linux コマンド・シェルスクリプト リファレンス

    終了ステータス 終了ステータスとは? コマンド終了時には「終了ステータス (exit-status)」と呼ばれるコマンドの成否を表す数値が特殊変数 $? に自動で設定される。 各コマンドにより異なるが、一般的には、 コマンド成功時には「0」 失敗時には「1」(コマンドやエラーの種類によっては 0 以外) が設定される。 → 直前に実行したコマンドの成否は、特殊変数 $? に設定されている値で確認する。 終了ステータスを設定 シェルスクリプトでは exit コマンドに指定したパラメータ (0 もしくは 1 ~ 255 の正の整数値のみ可) が、そのシェルの終了ステータスとなる。シェルスクリプトにおいても正常終了時は exit 0 で、異常終了時には exit 1 で終了するようにするのが慣例である。 関数も同様に return コマンドに指定したパラメータが終了ステータスとなる。 → シェル

    終了ステータス - UNIX & Linux コマンド・シェルスクリプト リファレンス
  • csh 入門 ---- if .... then ..... else ..... endif

  • 【Linux】ワイルドカードを変数に代入する方法 - echo("備忘録");

    おととい(2018/01/22)は全国的に大雪で、東京や関東で、ものすごい数の人が駅で立ち往生をらっている、という映像をニュースやSNSで見ました。 幸い、愛知県平野部は雪の影響はなかったですが、あの人だかりを見ると、やはり東京(というか関東)は僕にとって「(リモート等で)仕事する場所」ではあっても、「住む場所」ではないな、と改めて感じました。 で、題 例えば、下記のような内容のテキストファイルから「ファイルパス&ファイル名を1行ずつ読み込んで、何か処理する」とします。 /mnt/c/users/makky12/,sample.txt /mnt/c/users/makky12/,* ... で、これを while read line; do ##${line}は「ファイル一行の内容」。 declare -a array array=(`echo ${line} | tr ',' ' '

    【Linux】ワイルドカードを変数に代入する方法 - echo("備忘録");
  • シェルのデバッグ(csh、tcsh系) – Cool Japan

    対象:csh、tcsh シェル(csh、tcsh系)のデバッグは alias を利用する シェルにはデバッガーがあるわけではないので、デバッグにはちょっとコツがいります。-x オプションを指定して、実行ラインを標準エラーに出しながら行うことも可能ですが、来のスクリプトの出力とごっちゃになってわけがわからなくなる場合もあります。簡単なスクリプトなら、それでも大丈夫でしょうが。 私の場合、デバッグプリントと言う古典的な手法を用いますが、echo や printf でただ単に出力させると、デバッグ完了後の番時には、その echo 文などを削除するかコメントアウトする必要があり、それもまた手間がかかります。 そこで、echo や printf の代わりにデバッグ専用の Decho、Dprintf を別名定義や関数化してスクリプトに埋め込み使っています。まずは、サンプルコードを見てください。 c

  • シェルでcp -fが効かない | 森の人ブログ

    お久しぶです。 ここのところサボり気味で、全然更新できておらず… 気づけば、ワールドカップも終わり、ゴルフのメジャーも終わり、甲子園も終わり、、 夏が終わってしまった!! 気づけば9月! 9月ではないか。。 どれだけ更新サボってたんだか。 そんな時は、シェルスクリプトを作成した際に、cp -fでやってるのにうまくいかな時の話でもしましょうw うん、それがいいね! ということで、いくら -f指定して実行しても、上書きしても良い?って聞いてくるやつを黙らせる方法です(笑) コマンドの詳細は割愛します。 cpはコピー。-fは強制実行です。 ですので、例えば cp -f /tmp/test.txt /tmp/copy/ ってやると、/tmp/copy/配下にtest.txtがコピーされます。 コピー元の情報を保持したい時は、-pとか-aとか使います。ま、細かい話はいいとして。 で、だいたいこのcp