현장에서 자주 사용하는 쉘 커멘드를 정리하는 Bash 스크립트의 조작 정리

9027 단어 sedBashscript

소개



배포용 스크립트라든지 쓰고 있습니다.
프로그램은 PHP라든지 Node.js로 쓰기 때문에, Bash로 쓰는 것은 명령을 정리한 것이 됩니다.
인수를 건네주거나 환경 변수를 정의시키면서, 쉘에 대한 조작이 많습니다.
「Bash 쓰는 방법」이라든지 구그하면 Bash 스크립트 전반의 일이 나오므로 조금 취지가 다르고, CI라든지 인프라용으로 쓸 때 붐비고 있는 것의 정리입니다.

잘 쓰는 패턴


#!/usr/bin/env bash
set -xe # -xで実行コマンドを表示、-eでエラーがあったときに終了
cd -- "$(dirname "$BASH_SOURCE")" # ファイルがある場所に移動

Shebang



첫 줄에 쓰는 녀석. 셰반.

test.sh
#!/usr/bin/env bash

htps // 엔.ぃきぺぢ아. 오 rg / uuki / shiban g_ (우니 x)

오류 등 출력



오류 전용.

test.sh
set -e

커맨드도 출력한다.

test.sh
set -xe

set -x 한 것을 무효화한다


set -x 하고 있으면 여러가지 디버그 메세지가 흐르므로, 무효화하고 싶을 때는 + 옵션을 사용한다.-x 에 대해서는 +x .

test.sh
set -x # ここからデバッグ用の実行中コマンドが出力されます
echo 'hoge'

set +x # ここからデバッグ用の実行中コマンドの出力が無くなります。

With set +e. Yeah, it's backward that you enable shell options with set - and disable them with set +. Historical raisins, donchanow.
참고

착색하다


\e[34m 등의 이스케이프 순서로 색이 붙습니다.
printf '🎉\e[34m Success! \e[m🎉\n'

출력 예



현재 디렉토리를 스크립트 파일이 있는 위치로 이동



test.sh
pwd -P # 確認用 /home/username
cd -- "$(dirname "$BASH_SOURCE")" # ここ
pwd -P # 確認用 /home/username/bin/test

test를 사용한 판정



본래 test 는 수치 판정에 사용되고 있었지만, 쉘 스크립트로서의 test 는 캐릭터 라인 조작, 파일 조작을 주로 사용하고 있기 때문에 거기에 포커스.


옵션
설명
선택적 어원


-z
변수가 비어 있음
is Zero

-n
변수에 뭔가 있다
is Number

-d
디렉토리인지 여부
is Directory

-f
파일인지 여부
is File

-e
존재하는가
is Existing

-r
읽을 수 있습니까?
is Readable

-w
쓸 수 있을까
is Writable

-x
할 수 있는가?
is e Xecutable



구그할 때는 "bash test file exsist"와 같이 "bash test"라고 쓰면 좋다.

변수가 존재하는가?



기본적으로는 test-z 로 조사하는 것 같지만, -z의 본래의 의미는 제로인가 어떤가. 그래서 변수를 더블 쿼트로 둘러싸면 좋다.

test.sh
HOGE='hoge desu yo'
FUGA=''

if [ -z "$HOGE" ]; then
    echo "HOGE is empty" # 🙅‍♂️ここに来ません
else
    echo "HOGE is ${HOGE}" # 🙆‍♂️こちらになります
fi


if [ -z "$FUGA" ]; then
    echo "FUGA is empty" # 🙆‍♂️こちらになります
else
    echo "FUGA is ${FUGA}" # 🙅‍♂️ここに来ません
fi

결과
$ bash test.bash
HOGE is hoge desu yo
FUGA is empty

htp : // 우니 x. s c x x 짱. 코 m / 쿠에 s 치온 s / 146942 / HO W-KAN-I-ST-F-A-A-A B-E-S-MPTY-R 세

h tps : // s t c ゔ ぇ rf ぉ w. 코 m / 쿠에 s 치온 s / 18096670 / うぁ t 도에 s ~ 메안 엔 - 바 sh

디렉토리가 존재합니까?


if [[ -d "path/to/target" ]]; then
  echo 'Directory exists'
  exit 1
fi

변수 전개



기본적으로 $ 및 변수 이름.
예 :) $HOGE캐릭터 라인이 연속하는 경우에 확실하게 전개시키려면 $의 뒤에 중괄호로 변수명을 쓴다.
예 1 :)
예 2 :) $HOGEFUGA

인수 처리(Arguments)



1번째의 인수를 ${HOGE}FUGA 에 대입. 지정되어 있지 않으면 $PROFILE 를 대입.

test.sh
PROFILE=${1:-default}

echo $PROFILE
$ ./test.sh profile_desu
profile_desu

변수가 정의되면 ○○



삼항 연산자적인 것입니다.

test.sh
HOGE=hoge
FUGA=${HOGE-fuga} # $HOGEは定義されているのでhogeが参照される
echo $FUGA # hoge

PIYO=${HOGE2-piyo} # $HOGE2は定義されていないのでpiyoが参照される
echo $PIYO; # piyo

탭 문자 등을 내고 싶습니다.


default 를 사용하여 쉘에 배포합니다.
$ $'\t' # タブ文字が出る
$ echo 'mae'$'\t''usiro' # mae      usiro

맨 위에 탭 문자를 추가합니다.
$ echo 'hoge' | sed -e 's/^/'$'\t''/g'

curl 다운로드



Bash 스크립트는 아니지만 스크립트 내에서 사용하는 명령.
curl -LOJ https://example.com


옵션
설명


-L
리디렉션을 따르십시오. (리디렉션이 맞는 경우 추적하여 다음 URL에 자동으로 액세스)

-O
파일을 그대로 저장한다.

-J
서버로부터 지정된 파일명을 보존시의 파일명으로서 사용한다. 이 옵션이 없으면 URL의 말미를 파일명으로서 사용하려고 하기 위해(때문에), 토큰이나 쿼리 파라미터 첨부의 URL등의 다운로드시에 고생합니다.


ShellCheck



쉘 구문에 오류가 있는지 확인할 수 있습니다.
수중에서도 할 수 있고, 온라인에서도 가능합니다.

좋은 웹페이지 즐겨찾기