Shell script?
- 리눅스 command들을 단계적으로 수행하는것
- 리눅스 command들을 모아 놓은 ASCII Text 파일
- 특징
- 실행 권한을 할당해야 실행가능
- shell 구문은 기본 top-down 방식으로 해석해서 실행
- # : 주석
- #! /bin/bash : 셔뱅.해시뱅. 스크립트를 실행할 sub shell 이름
- shell script를 만드는데 해당 sub shell로 실행
- 해당 셔뱅을 넣지 않으면 login shell과 동일한 sub shell로 실행
sub shell?
fastwon1@docker-ubuntu:~$ /bin/bash // sub shell 실행
fastwon1@docker-ubuntu:~$ name=jaon // 변수생성
fastwon1@docker-ubuntu:~$ echo $name // 조회
jaon
fastwon1@docker-ubuntu:~$ exit // sub shell 종료
exit
fastwon1@docker-ubuntu:~$ echo $name // sub shell에서 생성한 변수 조회
fastwon1@docker-ubuntu:~$ exit
fastwon1@docker-ubuntu:~/ta$ export TEST=1 // parent shell에서 환경변수 설정
fastwon1@docker-ubuntu:~/ta$ env | grep TEST // 환경변수 조회
TEST=1
fastwon1@docker-ubuntu:~/ta$ /bin/bash // sub shell 실행
fastwon1@docker-ubuntu:~/ta$ env | grep TEST // parent shell에서 설정한 환경변수 조회
TEST=1
fastwon1@docker-ubuntu:~$ export TEST4=1 // sub shell에서 환경변수 설정
fastwon1@docker-ubuntu:~$ env | grep TEST4 // sub shell에서 조회
TEST4=1
fastwon1@docker-ubuntu:~$ exit
exit
fastwon1@docker-ubuntu:~$ env | grep TEST4 // parent shell에서 환경변수 조회
fastwon1@docker-ubuntu:~$
fastwon1@docker-ubuntu:~$ cat > test.sh //shift+insert ctrl+d
- sub shell에서 생성한 변수는 sub shell 종료 후 조회할 수 없다.
- parent shell에서 만든 환경변수는 sub shell에서 조회할 수 있다.
- sub shell에서 만든 환경변수는 parent shell에서 조회할 수 없다.
Positional Parameters(위치 매개변수)
- 입력하는 argument들을 $0, $1, $2와 같은 변수에 저장되어 스크립트로 전달
- $0 : 스크립트 이름
- $1 , $2 : 첫번째, 두번째 argument
- $# : argument 수
- $@ , $* : argument 파라미터 리스트
- $$ : 로그인 shell의 process ID
- $PWD : 현재 작업 디렉토리
- $PPID : parent process ID
fastwon1@docker-ubuntu:~$ test.sh arg1 arg2 arg3 .... \
> $0 $1 $2 $3 ..... $9 ${10} //해당변수로 채워져서 스크립트로 전달
fastwon1@docker-ubuntu:~$ ps -f
UID PID PPID C STIME TTY TIME CMD
fastwon1 7953 7952 0 8월31 pts/0 00:00:00 -bash
fastwon1 14551 7953 0 03:10 pts/0 00:00:00 ps -f
fastwon1@docker-ubuntu:~$ echo $$
7953 //현재 shell의 process ID
fastwon1@docker-ubuntu:~$ echo $PWD
/home/fastwon1
fastwon1@docker-ubuntu:~$ echo $PPID
7952 //현재 shell의 parent process ID
fastwon1@docker-ubuntu:~$
fastwon1@docker-ubuntu:~$
fastwon1@docker-ubuntu:~$
.....샘플테스트1
fastwon1@docker-ubuntu:~/test2$ cat parm_exam.sh -n
1 #! /bin/bash
2
3 echo "This script name : $0"
4 echo "This first argument: $1"
5 echo "This second argument: $2"
6 echo "This third argument: $3"
7 echo "This number of argument: $#"
8 echo "This list of arguments: $@"
9 echo "THis list of argument : $*"
10
fastwon1@docker-ubuntu:~/test2$ ./parm_exam.sh arg1 arg2 arg3
This script name : ./parm_exam.sh
This first argument: arg1
This second argument: arg2
This third argument: arg3
This number of argument: 3
This list of arguments: arg1 arg2 arg3
THis list of argument : arg1 arg2 arg3
fastwon1@docker-ubuntu:~/test2$
......샘플테스트2
fastwon1@docker-ubuntu:~/test2$
fastwon1@docker-ubuntu:~/test2$ cat ./parm_exam2.sh -n
1 #! /bin/bash
2
3 echo "[$1 directory]"
4 echo $(date +%c)
5 du -sh $1 2> /dev/null
6 echo
fastwon1@docker-ubuntu:~/test2$ ./parm_exam2.sh /var/
[/var/ directory]
2021년 09월 01일 (수) 오전 03시 30분 02초
2.2G /var/
fastwon1@docker-ubuntu:~/test2$
ls -la /usr/bin | grep "^-" | awk '{print $9}'
....echo 테스트
fastwon1@docker-ubuntu:~$ echo "hello"
hello
fastwon1@docker-ubuntu:~$ echo "hello\nworld"
hello\nworld
fastwon1@docker-ubuntu:~$ echo -e "hello\nworld"
hello
world
fastwon1@docker-ubuntu:~$ echo -e "hello\tworld"
hello world
fastwon1@docker-ubuntu:~$ echo -e "hello\aworld"
helloworld
fastwon1@docker-ubuntu:~$ echo -e "hello\aworld"
helloworld
fastwon1@docker-ubuntu:~$ echo -n "hello" //echo출력을 개행하지 않음.
hellofastwon1@docker-ubuntu:~$
....read 테스트
fastwon1@docker-ubuntu:~$ read tmp
1234
fastwon1@docker-ubuntu:~$ echo $tmp
1234
fastwon1@docker-ubuntu:~$
fastwon1@docker-ubuntu:~$ read name score
jaon 80
fastwon1@docker-ubuntu:~$ echo $name $score
jaon 80
fastwon1@docker-ubuntu:~$ read name score
jaon 80 classA
fastwon1@docker-ubuntu:~$ echo $score
80 classA
fastwon1@docker-ubuntu:~$ read -t10 -n8 passwd //10초동안 8글자만 입력받음
fastwon1@docker-ubuntu:~$ read -t10 -n8 passwd
12345678fastwon1@docker-ubuntu:~$ echo $passwd
12345678
fastwon1@docker-ubuntu:~$ read -t10 -s passwd //10초동안 silent mode(입력받은 글자가 shell에 보이지 않음)로 입력받음
fastwon1@docker-ubuntu:~$ echo $passwd
123456789
fastwon1@docker-ubuntu:~$ echo -n "name: "; read name
name: jaon
fastwon1@docker-ubuntu:~$ echo $name
jaon
printf
- format
- %d or %i : 숫자
- %s : 문자
- %f : 실수
fastwon1@docker-ubuntu:~$ printf "hello linux shell\n"
hello linux shell
fastwon1@docker-ubuntu:~$ printf "Name: %s\tScore: %i\n"
Name: Score: 0
fastwon1@docker-ubuntu:~$ printf "Name: %s\tScore: %i\n" JAON 80
Name: JAON Score: 80
fastwon1@docker-ubuntu:~$ echo $NAME $Score
fastwon1@docker-ubuntu:~$ today=`date +%y-%m-%d-%H-%M-%S`
fastwon1@docker-ubuntu:~$ printf "Today is %s\n" $today
Today is 21-09-01-06-19-32
fastwon1@docker-ubuntu:~$ printf "|%10s|%10s|%10.2f|\n" ubuntu jaon 10
| ubuntu| jaon| 10.00| //오른쪽 정렬되서 10글자까지 출력
fastwon1@docker-ubuntu:~$
fastwon1@docker-ubuntu:~$ printf "|%-10s|%-10s|%-10.2f|\n" ubuntu jaon 10
|ubuntu |jaon |10.00 | //왼쪽 정렬되서 10글자까지 출력
fastwon1@docker-ubuntu:~$
exit
- 0 : 프로그램 또는 명령이 성공으로 종료했음을 의미
- 1 - 255
- 1 : 일반 에러
- 2: syntax error
- 126 : 명령을 실행할 수 없음
- 127 : 명령(파일) 이 존재하지 않음
- 128 + N : 종료시그널 + N(kill -9 PID로 종료시 128 + 9 137)
- $? : 종료 값 출력
fastwon1@docker-ubuntu:~$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
fastwon1@docker-ubuntu:~$ date
2021. 09. 02. (목) 03:30:15 KST
fastwon1@docker-ubuntu:~$ date > /dev/null
fastwon1@docker-ubuntu:~$ echo $? //직전에 수행한 프로그램의 종료 코드값을 출력
0
fastwon1@docker-ubuntu:~$ date i
date: 잘못된 `i' 날짜
fastwon1@docker-ubuntu:~$ echo $?
1
fastwon1@docker-ubuntu:~$
fastwon1@docker-ubuntu:~$ data
명령어 'data' 을(를) 찾을 수 없습니다. 다음 명령어로 시도하시겠습니까:
deb datliballegro4-dev의 명령어 ' (2:4.4.3.1-1)'
deb datecoreutils의 명령어 ' (8.30-3ubuntu2)'
Try: sudo apt install <deb name>
fastwon1@docker-ubuntu:~$ echo $?
127 //명령이 존재하지 않음
fastwon1@docker-ubuntu:~$
fastwon1@docker-ubuntu:~$ sleep 1000
^C //ctrl+c
fastwon1@docker-ubuntu:~$ echo $?
130 //SIGINT
fastwon1@docker-ubuntu:~$
비교 연산자
연산자 |
설명 |
x -eq y |
x값과 y값이 같으면 true 리턴 |
x -gt y |
x값이 y값보다 크면 true 리턴 |
x -ge y |
x값이 y값보다 크거나 같으면 true 리턴 |
x -lt y |
x값이 y값보다 작으면 true 리턴 |
x -le y |
x값이 y값보다 작거나 같으면 true 리턴 |
x -ne |
x값과 y값이 같지 않으면 true 리턴 |
-e file |
파일이 존재하면 true 리턴 |
-d file |
파일이 디렉토리이면 true 리턴 |
-f file |
파일이면 true 리턴 |
-x file |
파일이 실행가능하면 true 리턴 |
fastwon1@docker-ubuntu:~$ x=10
fastwon1@docker-ubuntu:~$ test $x -lt 5
fastwon1@docker-ubuntu:~$ echo $?
1
fastwon1@docker-ubuntu:~$ test $x -gt 5
fastwon1@docker-ubuntu:~$ echo $?
0
fastwon1@docker-ubuntu:~$ test -e /etc/passwd
fastwon1@docker-ubuntu:~$ echo $?
0
fastwon1@docker-ubuntu:~$ test -e /etc/passw
fastwon1@docker-ubuntu:~$ echo $?
1
fastwon1@docker-ubuntu:~$ test -d /tmp
fastwon1@docker-ubuntu:~$ echo $?
0
fastwon1@docker-ubuntu:~$ test -f /tmp
fastwon1@docker-ubuntu:~$ echo $?
1
fastwon1@docker-ubuntu:~$
fastwon1@docker-ubuntu:~$ [ $x -lt 5 ]
fastwon1@docker-ubuntu:~$ echo $?
1
fastwon1@docker-ubuntu:~$ [ $x -gt 5 ]
fastwon1@docker-ubuntu:~$ echo $?
0
fastwon1@docker-ubuntu:~$
fastwon1@docker-ubuntu:~$ a=`expr $a + \( 10 \* 10 \)`
fastwon1@docker-ubuntu:~$ echo $a
111
fastwon1@docker-ubuntu:~$
if ~ fi
fastwon1@docker-ubuntu:~$ cat -n ./a.sh
1 #! /bin/bash
2
3 echo -n "input number: "
4 read x
5 if [ $x -gt 5 ]
6 then
7 echo "$x is grater than 5"
8 fi
9
10 echo -n "input filePath: "
11 read filePath
12
13 if [ -e $filePath ]
14 then
15 ls -l /etc/passwd
16 else
17 echo "$filePath file does not exists"
18 fi
19
fastwon1@docker-ubuntu:~$ ./a.sh
input number: 10
10 is grater than 5
input filePath: /etc/passwd
-rw-r--r-- 1 root root 2849 8월 30 06:45 /etc/passwd
fastwon1@docker-ubuntu:~$
case in ) ) ;; esc
.......테스트1
fastwon1@docker-ubuntu:~$ cat ./test.sh
#! /bin/bash
echo -n "Do you want restart(yes/no)? "
read answer
case $answer in
[yY]es) echo "System restart.";;
[nN]o) echo "nothing to do.";;
*) echo "entered incorrectly.";;
esac
fastwon1@docker-ubuntu:~$ ./test.sh
Do you want restart(yes/no)? yes
System restart.
fastwon1@docker-ubuntu:~$ ./test.sh
Do you want restart(yes/no)? Yes
System restart.
fastwon1@docker-ubuntu:~$ ./test.sh
Do you want restart(yes/no)? no
nothing to do.
fastwon1@docker-ubuntu:~$ ./test.sh
Do you want restart(yes/no)? No
nothing to do.
fastwon1@docker-ubuntu:~$ ./test.sh
Do you want restart(yes/no)? y
entered incorrectly.
fastwon1@docker-ubuntu:~$
.......테스트2
fastwon1@docker-ubuntu:~$ cat -n ./case-exam.sh
1 #! /bin/bash
2
3 cat << END
4 -----------------------------
5 1: Check disk usage
6 2: Check the login user list
7 ------------------------------
8 END
9 echo -n "number:"
10 read number
11 case $number in
12 1) df -h ;;
13 2) who ;;
14 *) echo "Bad choise!"
15 exit 1 ;;
16 esac
17 exit 0
fastwon1@docker-ubuntu:~$ ./case-exam.sh
-----------------------------
1: Check disk usage
2: Check the login user list
------------------------------
number:2
fastwon1 pts/0 2021-09-02 03:29 (10.100.0.2)
fastwon1@docker-ubuntu:~$ ./case-exam.sh
-----------------------------
1: Check disk usage
2: Check the login user list
------------------------------
number:3
Bad choise!
fastwon1@docker-ubuntu:~$
expr
- expr
- 정수형 산술연산(+, -, *, /, % ), 논리연산(|, &), 관계연산(=, !=, >, >=, <, <=)
- expr 사용시 제약사항
- 전체 문장은 ` 로 묶여야 한다.
- * 와 ( ) 는 특수기호로 인식되므로 연산자로 인식하기 위해서는 \ 를 앞에 붙여야 한다. 또는 "" ''
- 연산에 들어간 모든 변수, 숫자, 기호 사이에는 공백이 있어야 한다.
- = 에는 공백이 없어야 한다.
fastwon1@docker-ubuntu:~$
fastwon1@docker-ubuntu:~$ type expr // expr은 bash shell에 종속적이지 않다.
expr 는 /usr/bin/expr 임
..........expr 테스트
fastwon1@docker-ubuntu:~$ a=10
fastwon1@docker-ubuntu:~$ echo $a
10
fastwon1@docker-ubuntu:~$ a=`expr $a + 1`
fastwon1@docker-ubuntu:~$ echo $a
11
fastwon1@docker-ubuntu:~$ expr 5 + 5
10
fastwon1@docker-ubuntu:~$ x=10
fastwon1@docker-ubuntu:~$ expr $x - 10
0
fastwon1@docker-ubuntu:~$ expr $x '*' 2
20
fastwon1@docker-ubuntu:~$ expr $x '/' 2
5
fastwon1@docker-ubuntu:~$ expr $x '%' 2
0
fastwon1@docker-ubuntu:~$ x=10
fastwon1@docker-ubuntu:~$ x=$(expr $x + 1)
fastwon1@docker-ubuntu:~$ echo $x
11
fastwon1@docker-ubuntu:~$ x=$(expr $x + 1)
fastwon1@docker-ubuntu:~$ echo $x
12
fastwon1@docker-ubuntu:~$
fastwon1@docker-ubuntu:~$ x=10; y=20; z=$(expr $x '|' $y); echo $z
10
fastwon1@docker-ubuntu:~$ x=10; y=20; z=$(expr $x '&' $y); echo $z
10
fastwon1@docker-ubuntu:~$ x=10; y=20; z=$(expr $x '==' $y); echo $z
0
fastwon1@docker-ubuntu:~$ x=10; y=20; z=$(expr $x '!=' $y); echo $z
1
fastwon1@docker-ubuntu:~$ x=10; y=20; z=$(expr $x '<=' $y); echo $z
1
fastwon1@docker-ubuntu:~$ x=10; y=20; z=$(expr $x '>=' $y); echo $z
0
fastwon1@docker-ubuntu:~$
let
- 정수형 산술연산, bit연산(<<, >>, &, |), 논리연산(&&, ||), 단항연산(++, +=, -=)
fastwon1@docker-ubuntu:~$ type let // let은 bash shell에 종속된command이다.
let 는 쉘 내장임
fastwon1@docker-ubuntu:~$
........let 테스트
fastwon1@docker-ubuntu:~$ let sum=5+5
fastwon1@docker-ubuntu:~$ echo $sum
10
fastwon1@docker-ubuntu:~$ let sum=5*5
fastwon1@docker-ubuntu:~$ echo $sum
25
fastwon1@docker-ubuntu:~$ //let은 산술연산을 수행하는 command(+ - * /)
fastwon1@docker-ubuntu:~$ x=1
fastwon1@docker-ubuntu:~$ let x=x+1
fastwon1@docker-ubuntu:~$ echo $x
2
fastwon1@docker-ubuntu:~$ let x++
fastwon1@docker-ubuntu:~$ echo $x
3
fastwon1@docker-ubuntu:~$ let x+=1
fastwon1@docker-ubuntu:~$ echo $x
4
fastwon1@docker-ubuntu:~$ let x+=2
fastwon1@docker-ubuntu:~$ echo $x
6
fastwon1@docker-ubuntu:~$ x=1
fastwon1@docker-ubuntu:~$ ((x=x+1))
fastwon1@docker-ubuntu:~$ echo $x
2
fastwon1@docker-ubuntu:~$ ((x++))
fastwon1@docker-ubuntu:~$ echo $x
3
fastwon1@docker-ubuntu:~$
While
- While 다음의 조건이 성공하는 동안 do~done 사이의 명령어 반복
fastwon1@docker-ubuntu:~$ cat -n ./while-exam.sh
1 #! /bin/bash
2
3 num=10
4 while [ $num -le 20 ]
5 do
6 echo Number: $num
7 ((num++))
8 done
9
fastwon1@docker-ubuntu:~$ ./while-exam.sh
Number: 10
Number: 11
Number: 12
Number: 13
Number: 14
Number: 15
Number: 16
Number: 17
Number: 18
Number: 19
Number: 20
fastwon1@docker-ubuntu:~$
until
- until 다음의 조건이 성공할때까지 동안 do~done 사이의 명령어 반복
fastwon1@docker-ubuntu:~$ cat -n ./until-exam.sh
1 #! /bin/bash
2
3 x=10
4 until [ $x -gt 20 ]
5 do
6 echo Number: $x
7 ((x++))
8 done
fastwon1@docker-ubuntu:~$ ./until-exam.sh
Number: 10
Number: 11
Number: 12
Number: 13
Number: 14
Number: 15
Number: 16
Number: 17
Number: 18
Number: 19
Number: 20
fastwon1@docker-ubuntu:~$
Test
fastwon1@docker-ubuntu:~/test4$ cat -n ./add_user.sh
1 #! /bin/bash
2
3 echo -n "New userName: "
4 read userName
5 while getent passwd $userName &> /dev/null #유저가 존재하지 않을때까지
6 do
7 echo "Sorry that account $userName is already taken, Please pick a different username."
8 echo -n "New userName: "
9 read userName
10 done
11 sudo useradd -m -s /bin/bash $userName
12 echo $(id $userName)
fastwon1@docker-ubuntu:~/test4$
유저생성
fastwon1@docker-ubuntu:~/test4$ cat -n ./delete_user.sh
1 #! /bin/bash
2
3 echo -n "Enter userName for delete: "
4 read userName
5 until getent passwd $userName &> /dev/null #유저가 존재할때까지
6 do
7 echo "Sorry that account $userName not exists"
8 echo -n "Enter userName for delete: "
9 read userName
10 done
11 sudo userdel -r $userName > /dev/null 2>&1
12 result=$?
13 if [ $result -eq 0 ]
14 then
15 echo "Succeed to delete $userName"
16 else
17 echo "Failed to delete $userName"
18 fi
fastwon1@docker-ubuntu:~/test4$
유저삭제
fastwon1@docker-ubuntu:~/test4$ cat -n ./whileif.sh
1 #! /bin/bash
2
3 num=0
4 while [ $num -lt 5 ]
5 do
6 echo "Number: $num"
7 ((num++))
8 if [ "$num" == '2' ];then
9 break
10 fi
11 done
fastwon1@docker-ubuntu:~/test4$
for
- 주어진 list만큼 do~done사이의 command를 반복실행
//////////////////////////////////////////////////////////////////////////
fastwon1@docker-ubuntu:~/test4$ cat -n ./for.sh
1 for NUM in $(seq 5)
2 do
3 echo $NUM; done
4
fastwon1@docker-ubuntu:~/test4$
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
fastwon1@docker-ubuntu:~/test4$ ls
delete_user.sh for.sh for2.sh result test.sh whileif.sh
fastwon1@docker-ubuntu:~/test4$ cat -n ./for2.sh
1 for file in *
2 do
3 ls $file
4 done
fastwon1@docker-ubuntu:~/test4$ ./for2.sh
delete_user.sh
for.sh
for2.sh
result
test.sh
whileif.sh
fastwon1@docker-ubuntu:~/test4$
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
1 #! /bin/bash
2 arr=(9 8 7)
3 arr2=("test1" "test2" "test3")
4 for item in ${arr[@]};
5 do
6 echo $item
7 done
8 for item in ${arr2[@]};
9 do
10 echo $item
11 done
fastwon1@docker-ubuntu:~/test4$
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
fastwon1@docker-ubuntu:~/test4$ cat -n ./directory.sh
1 #! /bin/bash
2
3 if [ ! -d ~/bachup ]
4 then
5 mkdir ~/backup > /dev/null 2>&1
6 fi
7 for FILE in *
8 do
9 cp $FILE ~/backup/$FILE.old
10 done
fastwon1@docker-ubuntu:~/test4$
//////////////////////////////////////////////////////////////////////////
fastwon1@docker-ubuntu:~/test4$ cat -n ./directory.sh
1 #! /bin/bash
2
3 echo -n "enter directory path: "
4 read path
5 diCnt=0
6 fiCnt=0
7 echo $path
8 for file in $path/*
9 do
10 if [ -d $file ];then
11 ((diCnt++))
12 else
13 ((fiCnt++))
14 fi
15 done
16 echo "directory count:" $diCnt
17 echo "file count:" $fiCnt
fastwon1@docker-ubuntu:~/test4$ ./directory.sh
enter directory path: /var/log
/var/log
directory count: 11
file count: 48
fastwon1@docker-ubuntu:~/test4$ ls -l /var/log | grep ^d | wc -l //directory갯수 출력
11
fastwon1@docker-ubuntu:~/test4$ ls -l /var/log | grep ^- | wc -l //파일수 출력
48
fastwon1@docker-ubuntu:~/test4$