텍스트파일의 내용을 순차적으로 읽어들이는 방법

프로그래밍/BASH SHELL|2016. 11. 29. 10:08
반응형

/test.txt 파일의 내용에

file1

file2

file3

file4

file5

 

가 있는 경우

  

 

#!/bin/bash
for LIST in `cat /test.txt`; do
    echo $LIST
done 

 

 

와 같은 스크립트를 돌리면

 

file1

file2

file3

file4

file5

 

와 같은 결과가 나온다.

 

 

[출처] http://www.ischo.net/

 

 

위 코드는 cat /test.txt 대신 echo "$temp" 와 같이 사용도 가능합니다.

대신 한줄씩 불러들이기 위해서 $temp 변수 앞뒤로 쌍따옴표 붙이는것을 잊으면 안됩니다.

 

그리고 이것은 한 줄에 공백이 있을 경우 맨 앞에 것만 불러오는 단점이 있습니다.

불러들이는 행에 여러 열이 있을 경우 아래와 같이 각 열에 변수 적용이 가능합니다.

 

while read cnt name trash
        do
                echo "${cnt} : ${name}"
        done < list.txt 

 

또는 공백이 불특정하게 많을 경우 아래와 같이 사용도 가능합니다.

 

while read item; do
    echo $item
done < list.txt 

 

파일이 아닌 변수에서 한줄씩 라인을 읽어오고 싶을 경우 아래와 같이 파이프라인 (버티컬바)를 이용해 처리합니다.

 

echo "$list" | while read item; do
    echo $item
done

 

반응형

댓글()

변수 두개 붙여서 하나의 변수명으로 사용할 경우

프로그래밍/BASH SHELL|2016. 11. 29. 07:57
반응형

# vi test.sh


#!/bin/bash


size[1]="10G"

size[2]="10G"

size[3]="0G"

size[4]="0G"


for ((i=1; i<=4; i++)) ;do

    if [ ${size[$i]} == "0G" ]; then

        echo "no order ($i/4)"

    else

        echo ${size[$i]}

    fi

done 



# sh test.sh




반응형

댓글()

스크립트 실행시 변수 뒤에 \013. 이 붙을 경우

프로그래밍/BASH SHELL|2016. 10. 4. 11:37
반응형

[증상]

프롬프트상에서 명령줄을 직접 입력하면 실행되고,

쉘스크립트를 통해서는 명령이 실행되지 않을때


[원인]

while 사용시 발생하는 부분으로 변수에 줄바꿈(\r) 태그가 포함되어있는지 확인해야 함


[해결]

이렇게 하면 되지 않고

for i in `cat a.txt`


이렇게 해야함

for i in `cat a.txt | tr -d '\r'`



[참고] http://stackoverflow.com/questions/1118058/unix-scripting-trying-to-hosts-getting-013-not-found-3nxdomain

반응형

댓글()

[shellscript] 어제, 내일 날짜 구하기

프로그래밍/BASH SHELL|2015. 1. 27. 11:33
반응형

yesterday=`date -d "-1 day" "+%Y%m%d"`

tomorrow=`date -d "+1 day" "+%Y%m%d"`


반응형

댓글()

cut 명령어 (문자열 자르기)

프로그래밍/BASH SHELL|2015. 1. 27. 10:10
반응형

cut (플래그) (쪼갤 것(파일, 명령 등))


내용을 쪼개서 보여준다.


 

플래그

-c (범위)        :    -c 1-5 이런식으로 쓴다.

첫번째 문자부터 5번째 문자까지만 보겠다는 뜻.


만약

abcdefghijklmnop

1234567890


이런 문자열이었다면


abcde

12345

딱 이만큼까지만 보여지는 것이다. 아.. 직접 봐야 이해가 될텐데..ㅎ


-d (쪼갤문자)    :    -d / 이런식으로 쓴다.

특정한 문자로 구분되어 있는 파일(만약 csv라면 콤마 이런식.. )을 쪼갤 때 사용한다.

명시를 안하면, 기본적으로 tab 으로 인식한다.

-f (필드번호)    :    -d 로 쪼갠 것에서 몇번째 필드를 보겠다는 건지 선택할 때 사용한다.

 

ex)

who | cut -c 1-8   

사용자 이름이 나온다.


who | -c 1-8, 18-

1-8로 사용자 이름이 보이고, 18- 로 인하여 18번째 문자부터 나머지도 보여준다.


cut -d : -f 1 /etc/passwd

(참고로 /etc/passwd 파일은 등록된 사용자의 정보가 들어있는 파일이다.

마침 이 파일이 : 로 구분되어 있기 때문에 예제로 사용했다. )


이렇게 하면 파일을 : 로 구분 지어놨을 때 첫번째 필드(열)가 보여진다.



[출처] 보조기억장치 (http://reg1.tistory.com/23)

반응형

댓글()

[perl] 포트 체크 하기

프로그래밍/BASH SHELL|2015. 1. 27. 10:09
반응형

check.pl


require 5;

use strict;

require IO::Socket;


### Parse the command line options

###


my $machine = $ARGV[0];

my $port = $ARGV[1];

my $timeout = $ARGV[2];


my $proto = "tcp";


my $socket = IO::Socket::INET->new(PeerAddr => $machine,

                               PeerPort => $port,

                               Proto => $proto,

                       Timeout => $timeout

               );

if ($socket) {

    print "Server ",$machine," port ",$port," active\n";

    print "up\n";

}

else {

    print "down\n";

}


파일 생성 후 아래 명령 형식으로 확인 가능합니다.


# perl check.pl 아이피 포트 타임아웃

# /usr/bin/perl check.pl $ip $port 0.001    // 이렇게하면 php 웹소스에서 사용 가능

반응형

'프로그래밍 > BASH SHELL' 카테고리의 다른 글

[shellscript] 어제, 내일 날짜 구하기  (0) 2015.01.27
cut 명령어 (문자열 자르기)  (0) 2015.01.27
값 비교하기  (0) 2015.01.27
쉘스크립트 for 문  (0) 2015.01.27
if 문 사용  (0) 2015.01.27

댓글()

값 비교하기

프로그래밍/BASH SHELL|2015. 1. 27. 10:09
반응형

문자열비교 

[ string ] : string이 빈 문자열이 아니라면 참 

[ string1 = string2 ] : 두 문자열이 같다면 참 

[ string1 != string2 ] : 두 문자열이 다르면 참 

[ -n string ] : 문자열이 null(빈 문자열) 이 아니라면 참 

[ -z string ] : 문자열이 null(빈 문자열) 이라면 참 


산술비교 

[ expr1 -eq expr2 ] : 두 표현식 값이 같다면 참 ( EQual ) 

[ expr1 -ne expr2 ] : 두 표현식 갑이 같지 않다면 참 ( Not Equal ) 

[ expr1 -gt expr2 ] : expr1 > expr2 이면 참 ( Greater Then ) 

[ expr1 -ge expr2 ] : expr1 >= expr2 이면 참 ( Greater Equal ) 

[ expr1 -lt expr2 ] : expr1 < expr2 이면 참 ( Less Then ) 

[ expr1 -le expr2 ] : expr1 <= expr2 이면 참 ( Less Equal ) 

[ ! expr ] : expr 이 참이면 거짓, 거짓이면 참 

[ expr1 -a expr2 ] : expr1 AND expr2 의 결과 ( 둘다 참이면 참 ) 

[ expr1 -o expr2 ] : expr1 OR expr2 의 결과 ( 둘중 하나만 참이면 참 )


[출처] shell Script (쉘 스크립트).. 비교|작성자 찡찡이 (http://blog.naver.com/msn19972/90014737234)

반응형

'프로그래밍 > BASH SHELL' 카테고리의 다른 글

cut 명령어 (문자열 자르기)  (0) 2015.01.27
[perl] 포트 체크 하기  (0) 2015.01.27
쉘스크립트 for 문  (0) 2015.01.27
if 문 사용  (0) 2015.01.27
숫자 계산하기  (0) 2015.01.27

댓글()

쉘스크립트 for 문

프로그래밍/BASH SHELL|2015. 1. 27. 10:09
반응형
#!/bin/bash
for ((i=0; i<=20; i++)); do
    echo $i
done 

또는

#!/bin/bash

for i  in $(seq 1 20); do

    echo $i

done 



break 를 넣으면 중간에 for 문이 중지되어 빠져나오게 됩니다.
 


반응형

'프로그래밍 > BASH SHELL' 카테고리의 다른 글

[perl] 포트 체크 하기  (0) 2015.01.27
값 비교하기  (0) 2015.01.27
if 문 사용  (0) 2015.01.27
숫자 계산하기  (0) 2015.01.27
쉘스크립트로 telnet 접속 및 명령 실행하기  (0) 2015.01.27

댓글()

if 문 사용

프로그래밍/BASH SHELL|2015. 1. 27. 10:08
반응형
#!/bin/bash
status=`ls -al |wc -l`

if [ "$status" == "3" ]; then
echo "파일이 한개입니다."

elif [ "$status" == "4" ]; then
echo "파일이 두개입니다."

elif [ "$status" == "5" ]; then
echo "파일이 세개입니다."

else
echo "파일이 네개 이상입니다."

fi 


최신 bash 에서는 == 대신 = 로 사용될 수 있습니다.
 


반응형

댓글()

숫자 계산하기

프로그래밍/BASH SHELL|2015. 1. 27. 10:08
반응형

number=1

number=`expr $number + 1`

echo "$number"


결과 : 2


반응형

댓글()

쉘스크립트로 telnet 접속 및 명령 실행하기

프로그래밍/BASH SHELL|2015. 1. 27. 10:08
반응형

아래 내용으로 파일을 만든 후 실행하면 됩니다.

응용을 하여 ftp, telnet, ssh 등 연결후 실행되는 자동 스크립트를 만들 수 있습니다.


run.sh

#!/bin/sh

tpipe(){

sleep 1; echo 'helo'

sleep 1; echo 'mail from:admin@sysdocu.com'

sleep 1; echo 'rcpt to:admin@sysdocu.com'

sleep 1; echo 'quit'

}

tpipe | telnet sysdocu.com 25 


실행

[root@sysdocu ~]# sh run.sh


참고로 telnet 명령뒤에 '| tee a.txt' 를 추가하면 텔넷 출력 내용을 a.txt 에 저장합니다.


반응형

'프로그래밍 > BASH SHELL' 카테고리의 다른 글

if 문 사용  (0) 2015.01.27
숫자 계산하기  (0) 2015.01.27
영문 소문자, 대문자 그리고 숫자로 난수 발생하기  (0) 2015.01.27
글자 색상  (0) 2015.01.27
악성코드 <script> 일괄 삭제  (0) 2015.01.27

댓글()