★ 리눅스 스크립트 만들기
● vi b.sh 편집기를 열고 스크립트에서 입력받은 인수(argument) 출력하기
#!/bin/bash
echo "스크립트 이름 : $0"
echo "\$1 : $1"
echo "\$2 : $3"
echo "\$3 : $3"
echo "\$3 : $4"
echo "\$4 : $4"
echo "argument 개수 : $#"
echo " 모든 값 출력 : $*"
chmod +x ./b.sh
./b.sh 10 20 30 40
//이번 글에서는 기본적으로 홈디렉토리에서 진행하였다.
때문에 반드시 실행 할 때는 현재 경로에서 실행하는 ./b.sh 로 실행해준다.
기본적으로 홈디렉토리에서 진행하였다.
때문에 현재 경로에서 실행하는 ./b.sh 로 실행해준다.
vi 편집기에서 스크립트 파일을 수정해준 뒤에 chmod를 통해 실행 권한을 주고,
./b.sh 10 20 30 40 명령어를 통해서 실행해주면 된다.
명령줄에서 인수를 받아들이고, 인수의 개수, 각 인수의 값 및 모든 인수의 값을 출력한다.
● vi a1.c 편집기를 열고 입력받은 인수(argument) 출력하기
#include <stdio.h>
int main(int a, char* b[])
{
int i=0;
printf("인수의 개수 = %d \n", a);
for (i=0; i<a; i++)
printf(" \b[%d] ==> %s \n", i, b[i]);
return 0;
}
gcc a1.c -o aa
./aa 10 20 30 40
// c파일 이므로 컴파일을 위해서 gcc a1.c -o aa 명령어를 실행해준다.
// ./aa 현재 경로에서 실행하기 위해 ./aa 명령어를 통해서 명령어를 실행해준다.
컴파일러가 C 소스코드를 컴파일하여 실행파일로 만들어주는 명령어이다.
● vi a1.c 편집기를 열고 입력받은 인수(argument) 출력하기
#!/bin/bash
if [ 3 -eq 4 ]
then
echo "equal"
else
echo "not-equal"
fi
if [ -d /etc ]
then
echo " Directory 맞아요.."
fi
for i in 40 50 60 70
do
echo $i
done
※ 이 코드는 이 설명을 잘 봐야합니다.
위 스크립트는 쉘 스크립트입니다.
2번째 줄에서는 만약 3과 4가 같으면 "equal"을 출력하고, 그렇지 않으면
"not-equal"을 출력합니다.
여기서 스크립트를 직접 수정하여 if문 안의 숫자를 변경해서 실습해보면 좋습니다.
4-7번째 줄에서는 /etc 디렉토리가 존재하면 "Directory 맞아요.."를 출력합니다.
반대로 만약 파일인지 여부를 확인 할 경우에는 if [ -f /etc ] 로 수정해주면 됩니다.
9-12번째 줄에서는 40, 50, 60, 70의 값을 차례로 출력합니다.
즉, 이 스크립트는 간단한 조건문과 반복문을 이용한 예제입니다.
실행 결과를 보면 2번째 줄 if문에서 3과 4가 같지 않기 때문에 not-equal 이 출력되었고
4-7번째 줄 if문에서 /etc 디렉토리가 존재하는 것을 확인했기 때문에
"Directory 맞아요.."문구를 출력했다.
이후 for문 반복문을 통해서 숫자를 출력하고 종료하는 스크립트이다.
★ 리눅스 쉘로 시간&날짜를 특정 형식으로 출력해보기
● vi a1.sh 쉘 vi 편집기를 열고 명령어들을 입력해주기
#!/bin/bash
echo
a=`date +%A`
echo "오늘은 : $a"
d=`date +%Y년%m월%d일`
now=`date +:%H시%M분`
echo -e "오늘의 날짜는 : $d"
echo "지금 시간은 : $now"
echo
chmod +x a1.sh
./a1.sh
// 작성한 a1.sh 의 실행권한을 주고 ./a1.sh 로 쉘을 실행하여 출력해보기
해당 명령어들을 입력하면 성공적으로 요일과 날짜, 그리고 시간 정보를 쉘에 저장하고
필요한 때에 불러와서 정보를 확인할 수 있다.
★ 리눅스 쉘 여러 개의 스크립트 예제 코드 만들기
● 실행 전 현재 폴더 경로로 실행파일 위치 설정해주기
mkdir d80 && cd d80
PATH=$PATH:.
// 꼭 실행해주셔야 합니다..
// d80 디렉토리를 만들고 폴더 경로를 설정 후 시작합니다.
● 다중 if 문 (vi ifif.sh)
#!/bin/bash
typeset -i b=30
if [ $b -ge 90 ];
then
echo "\$b = $b A "
elif [ $b -ge 80 ];
then
echo "\$b = $b B "
elif [ $b -ge 70 ];
then
echo "\$b = $b C "
elif [ $b -ge 60 ];
then
echo "\$b = $b D "
else
echo "\$b = $b F "
fi
chmod +x ifif.sh
ifif.sh
[실행결과]
● case 문 (case.sh)
#!/bin/bash
var=2
case $var in
1)
echo "Apple"
;;
2)
echo "Grape"
;;
3)
echo "Kiwi"
esac
chmod +x case.sh
case.sh
[실행결과]
● continue, break 문 (continue.sh)
#!/bin/bash
echo " == continue "
for(( i=0; i<10; ++i ))
do
if (( i == 5 ))
then
continue;
fi
echo " \$i ==> $i ";
done
echo "== break "
for(( i=0; i<10; ++i ))
do
if (( i == 5 ))
then
break;
fi
echo "\$i ==> $i ";
done
chmod +x continue.sh
continue.sh
[실행결과]
● select 문 (select.sh)
#!/bin/bash
PS3=:" Select : "
select p in 'ls -f' pwd date who exit
do
$p
done
chmod +x select.sh
select.sh
[실행결과]
● shift 문 (sh.sh)
#!/bin/bash
set C언어 자료구조 UNIX 오라클
echo $*
shift
echo $*
shift
echo $*
shift
echo $*
shift
echo -------------------
set C언어 자료구조 UNIX 오라클
echo $*
echo " shift 3 "
shift 3
echo $*
chmod +x sh.sh
sh.sh
[실행결과]
★ 리눅스 cat, paste, sqlite3를 사용한 파일 다루기
● 명령어를 사용해서 진행 해보기
mkdir d80 && cd d80
cat > k1
박동우
한태영
이승혁
cat > k2
1000
500
500
cat > k3
34
23
47
paste k1 k2 k3 > kk
nl kk
1 박동우 1000 34
2 한태영 500 23
3 이승혁 500 47
awk -F' ' '{print $1, '\t', $2, '\t', $3}' kk
vi kk
1 박동우|1000|34
2 한태영|500|23
3 이승혁|500|47
sqlite3
sqlite> create table yy(name, asset, age);
sqlite> .import kk yy
sqlite> .head on
sqlite> .mode col
sqlite> select * from yy;