Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Use Perl as Better Shell Script

Use Perl as Better Shell Script

Houtou.pm #1

Avatar for karupanerura

karupanerura

May 31, 2025
Tweet

More Decks by karupanerura

Other Decks in Programming

Transcript

  1. @karupanerura • Perl / Go / Java / TypeScript /etc..

    • PAUSE: KARUPA • Software Engineer @ DeNA, Co,. LTD. • Chief Director @ Japan Perl Association
  2. ࢁསͱࢲ • όϯυ • Live @ KAZOO HALL • ٢ా͏ͲΜ

    • ޷͖ • ࢁསେֶϫΠϯ • ͏·͍ https://www.yamanashi.ac.jp/social/3131
  3. Shell Scriptͷ೉͠͞ • ίϚϯυͷ؀ڥࠩҟ • macOSͱLinuxͰ͸sed΍awkͳͲͰBSD/GNUҧ͍͕͋ΔʢΦϓγϣϯ͕ҟͳΔʣ • ref. https://speakerdeck.com/mackee/perl-for-shell-awk-and-sed-programmers •

    ࣮ࡍͷίϚϯυͱϏϧτΠϯίϚϯυͱγΣϧߏจ͕ࠞࡏ͢Δ • bashͷtestͱ[ͱ[[ͷҧ͍Λઆ໌Ͱ͖ΔͬͯਓͲΕ͘Β͍͍·͔͢ʁ • ෳࡶͳσʔλߏ଄Λѻ͏ͷ͕ۤख
  4. খωλ: testͱ[ͱ[[ͷҧ͍ bash-5.2$ type [ [ ͸γΣϧ૊ΈࠐΈؔ਺Ͱ͢ bash-5.2$ type test

    test ͸γΣϧ૊ΈࠐΈؔ਺Ͱ͢ bash-5.2$ type [[ [[ ͸γΣϧͷ༧໿ޠͰ͢
  5. খωλ: testͱ[ͱ[[ͷҧ͍ bash-5.2$ type [ [ ͸γΣϧ૊ΈࠐΈؔ਺Ͱ͢ bash-5.2$ type test

    test ͸γΣϧ૊ΈࠐΈؔ਺Ͱ͢ bash-5.2$ type [[ [[ ͸γΣϧͷ༧໿ޠͰ͢ ಉ͡૊ΈࠐΈؔ਺(alias) ߏจʢਖ਼نදݱͳͲ΋αϙʔτʣ
  6. PerlͱbashͷߏจΛൺֱ #!/usr/bin/perl use strict; use warnings; # コマンドライン引数の取得 my $arg1

    = shift @ARGV; # 配列の宣言 my @array; # コマンドの実行 system 'grep status:500 /var/log/ access.log | ...'; #!/bin/bash set -ue -o pipefail # コマンドライン引数の取得 arg1=$1; shift # 配列の宣言 declare -a array # コマンドの実行 grep status:500 /var/log/access.log | ...
  7. PerlͱbashͷߏจΛൺֱ # ίϚϯυΛ࣮ߦͯ݁͠ՌΛม਺ʹೖΕ͍ͨ my $result = `grep status:500 file`; #

    ৚݅෼ذ if ($x > 0) { ... } # ϧʔϓ while ($x > 0) { ... } # ίϚϯυΛ࣮ߦͯ݁͠ՌΛม਺ʹೖΕ͍ͨ result=`grep status:500 file` # ৚݅෼ذ if [[ "$x" -gt 0 ]]; then ... fi # ϧʔϓ while [[ "$x" -gt 0 ]]; do ... done