셸의 기능
출력명령
특수문자
ls *: 현재 디렉터리의 모든 파일과 서브 딜렉터리를 나열, 서브디렉터리의 내용도 출력
cp *.txt ../tmp2: 부모 디렉터리의 tmp2 디렉터리에 .txt로 끝나는 모든 파일을 복사한다.
ls -F t*: t를 포함한 t로 시작하는 모든 파일의 이름과 파일 종류를 출력
ls -l h*d: h로 시작해 d로 끝나는 모든 파일 출력
ls p?.txt : p 다음에 한글자가 오는 모든 파일을 찾음
ls -l tmp[123].txt
ls [A-Za-z][0-9]: 파일명이 영문자로 시작 숫자로 끝 ex) `ls [a-p][1-3].txt`
date;ls;pwd: 3개의 명령어 연속으로 출력
ls -al /etc |more : 왼쪽의 실행 결과(ls -al /etc)를 오른쪽(more)으로 넘겨줌
echo $PATH, ehco $SSH_TTY: 변수의 값을 보여줌
echo "Today is (백틱)date(백틱)": date를 실행해줌
파이썬 f스트링 느낌 {}
cp tmp.sh t\
: 과 같은 특수문자를 파일명에 넣으려면 백슬래시가 들어가야 함
cat < tmp: cat 명령의 입력을 tmp 파일에서 받는다.
출력 리다이렉션
>
>>
-
o noclobber : 덮어쓰기(>
) 불가능+
o noclobber : 덮어쓰기(>
) 가능변수
$
문자가 들어간 글자를 출력하려면 ''로 묶어주거나 앞에 \를 붙임(""도 가능)cat > test1.sh
#!/bin/sh
myvar = 'Hi Choi'
echo $myvar
echo "$myvar"
echo '$myvar'
echo \$myvar
read myvar
echo '$myvar' = $myvar
exit 0
ctrl+d
bash test1.sh
cat > test2.sh
\#!/bin/sh
num1=100
num2=$num1 + 200
echo $num2
num3=`expr $num1 + 200`
echo $num3
num4=`expr \( $num1 + 200 \) / 10 \* 2`
echo $num4
exit 0
ctrl+d
bash test2.sh
cat > test3.sh
\#!/bin/sh
if [ "woo" != "woo" ]
then
echo "참입니다"
else
echo "거짓입니다"
fi
exit 0
ctrl+d
bash test3.sh
cat > test4.sh
\#!/bin/sh
if [ 100 -eq 200 ]
then
echo "100과 200은 같다."
else
echo "100과 200은 다르다."
fi
exit 0
ctrl+d
bash test4.sh
cat > test5.sh
\#!/bin/sh
fname=/lib/systemd/system/cron.service
if [ -f $fname ]
then
head -5 $fname
else
echo “cron 서버가 설치되지 않았습니다."
fi
exit 0
ctrl+d
bash test5.sh
cat > test6.sh
#!/bin/sh
case "$1" in
start)
echo "시작";;
stop)
echo "중지";;
restart)
echo "다시 시작";;
*)
echo "뭔지 모름";;
esac
exit 0
ctrl+d
bash test6.sh
cat > test7.sh
\#!/bin/sh
echo "리눅스가 재미있나요? (yes / no)"
read answer
case $answer in
yes | y | Y | Yes | YES)
echo "다행입니다."
echo "더욱 열심히 하세요 ^^";;
[nN]*)
echo "안타깝네요. ㅠㅠ";;
*)
echo "yes 아니면 no만 입력했어야죠"
exit 1;;
esac
exit 0
ctrl+d
bash test7.sh
cat > test8.sh
\#!/bin/sh
echo "보고 싶은 파일명을 입력하세요."
read fname
if [ -f $fname ] && [ -s $fname ] ; then
head -5 $fname
else
echo "파일이 없거나, 크기가 0입니다."
fi
exit 0
ctrl+d
bash test8.sh
cat > test9.sh
\#!/bin/sh
hap=0
for i in 1 2 3 4 5 6 7 8 9 10
do (do~done까지 반복할 부분)
hap=`expr $hap + $i`
done
echo "1부터 10까지의 합: "$hap
exit 0
ctrl+d
bash test9.sh
cat > test10.sh
\#!/bin/sh
for fname in $(ls *.sh)
do
echo "--------$fname-------"
head -3 $fname
done
exit 0
ctrl+d
bash test10.sh
\#!/bin/sh
while [ 1 ]
do
echo “우분투 16.04 LTS”
done
exit 0
\#!/bin/sh
hap=0
i=1
while [ $i -le 10 ]
(until [ $i -gt 10 ]으로 바꿔도 같은 결과)
do
hap=`expr $hap + $i`
i=`expr $i + 1`
done
echo "1부터 10까지의 합 : "$hap
exit 0
\#!/bin/sh
echo "비밀번호를 입력하세요."
read mypass
while [ $mypass != "1234" ]
do
echo "틀렸음. 다시 입력하세요."
read mypass
done
echo "통과~~"
exit 0
until 문은 while과 용도는 같으나 반대로 거짓일때만 반복한다.
break, continue, exit, return
\#!/bin/sh
echo "무한반복 입력을 시작합니다(b: break, c: continue, e: exit)"
while [ 1 ] ; do
read input
case $input in
b | B )
break ;;
c | C )
echo "continue를 누르면 while의 조건으로 돌아감"
continue ;;
e | E )
echo "exit를 누르면 프로그램(함수)를 완전히 종료함"
exit 1 ;;
esac;
done
echo "break를 누르면 while을 빠져나와 지금 이 문장이 출력됨."
exit 0
\#!/bin/sh
hap () {
echo `expr $1 + $2`
}
echo "10 더하기 20을 실행합니다"
hap 10 20
exit 0
#!/bin/sh
str="ls -l test18.sh"
echo $str
eval $str
exit 0
#!/bin/sh
echo $var1
echo $var2
exit 0
#!/bin/sh
var1="지역변수"
export var2 ="외부변수"
sh exp1.sh
exit 0
#!/bin/sh
var1=100.5
var2="재미있는 리눅스"
printf "%5.2f \n\n \t %s \n" $var1 "$var2"
exit 0
#!/bin/sh
echo "오늘 날짜는 $(date) 입니다"
set $(date)
echo "오늘은 $4 요일입니다."
exit 0
\#!/bin/sh
myfunc() {
str=""
while [ "$1" != "" ] ; do
str="$str $1"
shift
done
echo $str
}
myfunc AAA BBB CCC DDD EEE FFF GGG HHH III JJJ KKK
exit 0