$0
- 실행된 쉘 스크립트 이름$#
- 스크립트에 넘겨진 인자의 갯수$$
- 쉘 스크립트의 프로세스 ID$1~ $nnn
- 넘겨진 인자들$*
- 스크립트에 전달된 인자들을 모아놓은 문자열. 하나의 변수에 저장되며 IFS 환경변수의 첫번째 문자로 구분된다.$@
- $*
과 같다. 다만 구분자가 IFS변수의 영향을 받지 않는다.$chmod 755 test1
$./test1 a1 a2 a3 a4
This Script Executable File : ./test1
Argument Count : 4
Process ID : 905
Argument List $* : a1 a2 a3 a4
Argument List $@ : a1 a2 a3 a4
Argument 1 : a1
Argument 2 : a2
Argument 3 : a3
Argument 4 : a4
변수 = $((산술식))
$1
, $a
와 같은) 도 들어갈 수 있다. 산술식 내에 숫자가 아닌 문자열, 또는 문자열이 담겨있는 변수가 들어가면 그것들은 계산에서 제외된다. (정확히 말하면 0 으로 간주되어 연산이 이루어 지지 않는다.)${parm:-default}
- parm이 존재하지 않으면 default로 대체된다.${#parm}
- parm의 길이를 참조한다.(가져온다)${parm%word}
- 끝에서부터 word와 일치하는 parm의 최소부분(첫번째 일치)을 제거하고 나머지를 반환한다.${parm%%word}
- 끝에서부터 word와 일치하는 parm의 최대부분(마지막 일치)을 제거하고 나머지를 반환한다.${parm#word}
- 처음부터 word와 맞는 parm의 최소부분(첫번째 일치)을 제거하고 나머지 부분을 반환한다.${parm##word}
- 처음부터 word와 맞는 parm의 최대부분(마지막 일치)을 제거하고 나머지를 반환한다.1 #!/bin/sh
2
3 p="/usr/X11R6/bin/startx"
4
5 unset p
6 a=${p:-"Variable p Not found"}
7 echo $a
8
9 p="/usr/X11R6/bin/startx"
10 a=${p:-"Variable parm Not found"}
11 echo $a
12
13 a=${#p}
14 echo $a
15
16 a=${p%/*}
17 echo $a
18
19 a=${p%%/*}
20 echo $a
21
22 a=${p#*/}
23 echo $a
24
25 a=${p##*/}
26 echo $a
27
Variable p Not found
/usr/X11R6/bin/startx
21
/usr/X11R6/bin
usr/X11R6/bin/startx
startx
-f
는 주어진 인자가 일반 파일일 때 참이 된다.[]
로 대체될 수 있다.expr1 -eq expr2
- 두 표현식 값이 같다면 참 ('EQual')expr1 -ne expr2
- 두 표현식 값이 같지 않다면 참 ('Not Equal')expr1 -gt expr2
- expr1 > expr2
이면 참 ('Greater Than')expr1 -ge expr2
- expr1 >= expr2
이면 참 ('Greater Equal')expr1 -lt expr2
- expr1 < expr2
이면 참 ('Less Than')expr1 -le expr2
- expr1 <= expr2
이면 참 ('Less Equal')! expr
- expr 이 참이면 거짓, 거짓이면 참expr1 -a expr2
- expr1 AND expr2 의 결과 (둘다 참이면 참, 'And')expr1 -o expr2
- expr1 OR expr2 의 결과 (둘중 하나만 참이면 참, 'Or')-b FILE
- FILE 이 블럭 디바이스 이면 참-c FILE
- FILE 이 문자 디바이스 이면 참.-d FILE
- FILE 이 디렉토리이면 참-e FILE
- FILE 이 존재하면 참-f FILE
- FILE 이 존재하고 정규파일이면 참-g FILE
- FILE 이 set-group-id 파일이면 참-h FILE
- FILE 이 심볼릭 링크이면 참-L FILE
- FILE 이 심볼릭 링크이면 참-k FILE
- FILE 이 Sticky bit 가 셋팅되어 있으면 참-p FILE
- True if file is a named pipe.-r FILE
- 현재 사용자가 읽을 수 있는 파일이면 참-s FILE
- 파일이 비어있지 않으면 참-S FILE
- 소켓 디바이스이면 참-t FD
- FD 가 열려진 터미널이면 참-u FILE
- FILE 이 set-user-id 파일이면 참-w FILE
- 현재 사용자가 쓸 수 있는 파일(writable file) 이면 참-x FILE
- 현재사용자가 실행할 수 있는 파일(Executable file) 이면 참-O FILE
- FILE 의 소유자가 현재 사용자이면 참-G FILE
- FILE 의 그룹이 현재 사용자의 그룹과 같으면 참FILE1 -nt FILE2
- : FILE1이 FILE2 보다 새로운 파일이면 ( 최근파일이면 ) 참FILE1 -ot FILE2
- : FILE1이 FILE2 보다 오래된 파일이면 참FILE1 -ef FILE2
- : FILE1 이 FILE2의 하드링크 파일이면 참case 변수 in
패턴 [ | 패턴 ] ... ) 문장 ;;
패턴 [ | 패턴 ] ... ) 문장 ;;
....
* ) 문장 ;;
esac
statment1 && statment2 && statmentN && .....
statment1 || statment2 || statmentN || .....
[ 조건 ] && 문장1 || 문장2
[조건] && {
문장1
문장2
문장3
} || {
문장4
문장5
문장6
}
for 변수 in 값1, 값2, ...
do
문장
done
for str in "test1", "test2", "test3", "test4"
do
echo @str
done
test1
test2
test3
test4
for file in $(ls -a | grep "^\.")
do
echo "$file is Hidden File"
done
for file in $(ls chap[345].txt); do
echo "--- $file ---" >> Books.txt
cat $file >> Books.txt
done
echo "\$* output"
for fvar in $*
do
echo $fvar
done
echo "\$@ output"
for fvar in $@
do
echo $fvar
done
while 조건문
do
문장
done
echo "Enter Password : "
read password1
echo "Retype Password : "
read password2
while [ "$password1" != "$password2" ]
do
echo "Password mismatch Try again "
echo "Retype Password : "
read password2
done
echo "OK Password Match complete"
until 조건문
do
문장
done
#!/bin/sh
until who | grep "$1" > /dev/null
do
sleep 10
done
echo "User $1 just logged in ^_^"
#!/bin/sh
echo "다음중 스크립트언어 프로그래밍에 속하는 것은 ?"
select var in "쉘 프로그래밍" "C 프로그래밍" "자바 프로그래밍" "Exit"
do
if [ "$var" = "쉘 프로그래밍" ]
then
echo "정답입니다."
exit 0
elif [ "$var" = "Exit" ]
then
echo "종료합니다."
exit 1
else
echo "$var 을 선택하셨습니다. 오답입니다."
echo "다음중 스크립트언어 프로그래밍에 속하는 것은 ?"
fi
done
함수명 ()
{
문장
return 값
}
함수명 인자1, 인자2, ...
$#
, $*
, $0
등의 인자 변수를 사용한다. 즉 함수내의 $#
과 본체의 $#
은 다를 수 있다는 것이다.#!/bin/sh
func()
{
echo ------ this is func --------
echo "This Script Executable File : $0"
echo "Argument Count : $#"
echo "Process ID : $$"
echo "Argument List \$* : $*"
echo "Argument List \$@ : $@"
echo "Argument 1 : $1"
echo "Argument 2 : $2"
echo "Argument 3 : $3"
}
echo ------ this is main --------
echo "This Script Executable File : $0"
echo "Argument Count : $#"
echo "Process ID : $$"
echo "Argument List \$* : $*"
echo "Argument List \$@ : $@"
echo "Argument 1 : $1"
echo "Argument 2 : $2"
echo "Argument 3 : $3"
echo "Argument 4 : $4"
func aa bb cc
while [ $a -eq 10 ]
do
if [ $a -eq 5 ]; then
continue
fi
done
foo=10
x=foo
y='$'$x
echo $y
foo=10
x=foo
eval y='$'$x
echo $y
$1
부터 차례대로 대입된다.#!/bin/sh
echo $#
set $(ls)
echo $#
0
22
#!/bin/sh
echo $1
shift
echo $1
shift 5
echo $1
#./myscript 1 2 3 4 5 6 7 8 9 0
1
2
7
trap command signal
x = $(명령)
명령 << 종료문자열
입력값.....
종료문자열
#!/bin/sh
mail $1 << myscript
This is Header
This is Body
.
myscript
sh -n 스크립트
: 문법 에러만을 검사, 명령을 실행하지 않음sh -v 스크립트
: 명령을 실행하기 전에 에코sh -x 스크립트
: 명령줄에서 처리한 다음 에코set -o noexec
또는 set -n
: 문법 에러만을 검사, 명령을 실행하지 않음set -o verbose
또는 set -v
: 명령을 실행하기 전에 에코set -o xtrace
또는 set -x
: 명령줄에서 처리한 다음 에코set -o nounset
또는 set -u
: 정의되지 않은 변수가 사용되면 에러 메시지를 제공한다.set -x
를 이용하여 손쉽게 실행과정을 추적할 수 있다. (참고로 set 옵션을 취소하려면 set +x
를 입력하면 된다. 다른 옵션도 마찬가지)set -x
for str in "test1" "test2" "test3" "test4"
do
echo $str
done
+ for str in '"test1"' '"test2"' '"test3"' '"test4"'
+ echo @str
@str
+ for str in '"test1"' '"test2"' '"test3"' '"test4"'
+ echo @str
@str
+ for str in '"test1"' '"test2"' '"test3"' '"test4"'
+ echo @str
@str
+ for str in '"test1"' '"test2"' '"test3"' '"test4"'
+ echo @str
@str
리눅스 명령어 계속 실행 (0) | 2021.01.11 |
---|---|
shell java 실행 명령어 예제 (0) | 2020.12.10 |
shell 파일 삭제 (날짜 기준) (0) | 2020.12.10 |
리눅스 디렉토리 개수 (0) | 2020.11.18 |
원격 데스크톱 듀얼 모니터 (0) | 2020.08.26 |
댓글 영역