#!/bin/bash
echo "I don't have to be great to start, but I have to start to be great!"
./day1.sh
로 방금 만든 파일을 실행하면 아래같은 에러가 난다.zsh: permission denied: ./day1.sh
chmod +x day1.sh
./day1.sh
로 실행하면 아래처럼 출력된다. I don't have to be great to start, but I have to start to be great!
ls -l day1.sh
로 권한을 확인하면 아래와 같다.-rwxr-xr-x 1 hwanil staff 87 Aug 4 16:44 day1.sh
chmod +rx day1.sh
명령어를 실행해보자.#!
로 시작하는데, 저 두 캐릭터를 shebang이라 부르기도 한다.#
가 sharp으로 불리기도 하고, !
가 bang으로 불리기 때문에 합쳐서 shebang/bin/bash
는 interpreter다.#!/bin/bash
를 명시하지 않으면 script는 current shell interpreter로 실행된다.#!/bin/bash
를 명시해주자../day1.sh
혹은 /home/jason/day1.sh
식으로 가능하다.type echo
echo is a shell builtin
type -a echo
를 사용echo is a shell builtin
echo is /bin/echo
#!/bin/bash
SKILL="shell scripting"
echo "I want to be good at ${SKILL}. That's why I practice ${SKILL}"
=
전후로 스페이스바가 없는 것.chmod +x day2.sh
, chmod +x day2.sh
실행시 결과는 아래와 같다.I want to be good at shell scripting. That's why I practice shell scripting
#!/bin/bash
WORD="script"
echo "${WORD}ing is fun"
echo "$WORDing is fun"
출력결과:
scripting is fun
is fun
uppercase가 convention이다. 항상 대문자로 쓰자.
변수를 사용하는 방법은 두가지다.
${VARIABLE}
형태로 사용이 가능하고,
$VARIABLE
형태로도 가능하다. {}를 생략.
하지만 변수 바로 뒤에 다른 문자를 이어 쓴다면 {}를 꼭 써줘야 한다. 안그러면 어디서부터 어디까지가 변수인지 몰라 의도한 대로 작동하지 않는다.
위 예시에서 $WORDing
은 아예 없는 변수로 취급받아 인식 자체가 안됐다.
주석은 #
를 사용하여 표시한다.
#!/bin/bash
# Determine if the user executing this script is the root use or not.
# Display the UID
echo "Your UID is ${UID}."
# Display if the user is the root user or not.
if [[ "${UID}" -eq 0 ]]
then
echo "You are root."
else
echo "You are not root"
fi
if
문과 [[
, ]]
사이에는 각각 최소 스페이스바 1칸이 필요하다. (문법)
-eq
: equal의 뜻이다.
-ne
: not equal-lt
: less thanif문 뒤에 [
를 하나만 써도 되지만, 그건 old version. 두개 쓰는게 최신 버전이므로 항상 두개를 쓰자.
위 파일 실행결과는 아래와 같다.
Your UID is 501.
You are not root
root유저의 UID는 항상 0이다.
root유저로 실행하려면 sudo를 사용하면 된다. sudo ./got-root.sh
결과:
Your UID is 0.
You are root.