쉘스크립트 작성을 손도 못대겠어요. 도와주세요.
다름이 아니라 대학교에서 리눅스 수강중인데,
쉘 스크립트 를 작성하는 문제가 나왔습니다.
총 3문제인데.... 3문제 다 손을 못대겠습니다!! -ㅁ-;
-----------------------------------------------------------------------------------------------------------
1) 1부터 n까지의 합을 계산하는 script file "findsum"을 만들어 실행권한을 준 후 저장하라.
그 script file은 다음의 조건을 만족하여야 한다.
$ ./findsum 인자를 주지 않으면 “Usage : findsum n"이라는 결과를 출력하고 끝나야 하며,
그러나 shell 자체는 종료되지 않아야 한다.(즉 exit을 사용말 것)
$ ./findsum 10 처럼 숫자로 인자를 주면 10까지의 합을 출력해야 한다.
(예) $ ./findsum
Usage : findsum n
$ ./findsum 10
Sum from 1 to 10 is 55
2) 다음 조건을 만족하는 shell script “keykind"를 작성하여 실행권한을 준 후 저장하라.
- 실행하면 “Press any key and hit ENTER. To stop, enter @ : "라고 출력하고 입력을 기다리며
- 소문자와 ENTER를 치면 “lowercase", 대문자와 ENTER를 치면 "uppercase", 숫자와 ENTER를 치면 ”digit",
- 그 외“@”를 제외한 아무 키나 치고 ENTER를 누르면 “other"라고 출력하며
- 다시 “Press any key and hit ENTER. To stop, enter @ : "라는 글을 출력하고 영원히 loop을 돌되
“@”키와 ENTER를 쳐야만 looping이 끝나는 script file을 만들라.
주의 : 인터넷상에서 비슷한 shell script를 찾을 수 있으나 제대로 작동하지 않음.
3) 강의 노트 4장 35번째 slide의 multi.bash를 응용하여 다음의 요구조건에 맞는 script file “multi”를 작성하여 실행가능하도록 변경한 후 저장하라.
* $ ./multi 인자를 주지 않으면 아래 첫 번째 (예)와 같이 반응하고 끝나도록 해야 함
* $ ./multi 10 인자로 10이상의 값을 주면 아래 두 번째 (예)와 같이 반응하고 끝나도록 해야 함.
위와 같이 인자가 없거나 잘못 주어지면, 교재의 예제는 logout이 되어 버리나 logout되지 않고 새 prompt가 나오도록 만들어야 함.
* $ ./multi 7 인자를 7을 주면 구구단 7단까지 인쇄함(단, 교재처럼 출력이 들쑥 날쑥 하지 않고
일정한 간격으로 정렬되어야 함)
* 정상적 출력은 다음과 같아야 하며, 1줄(공백)부터 5번째 줄까지(즉 ==================)는 필히 here document(강의노트 3장 참조)를 사용해서 출력되도록 해야 함
(예) $ ./multi
Usage: multi number
$ ./multi 100
Enter a number smaller than 10
$ ./multi 7
multiplication table x * y
y= 1 2 3 4 5 6 7 8 9
=======================================
x=1 1 2 3 4 5 6 7 8 9
x=2 2 4 6 8 10 12 14 16 18
x=3 3 6 9 12 15 18 21 24 27
x=4 4 8 12 16 20 24 28 32 36
x=5 5 10 15 20 25 30 35 40 45
x=6 6 12 18 24 30 36 42 48 54
x=7 7 14 21 28 35 42 49 56 63
-------------------------------------------------------------------------------------------------------------
이와 같은데, 제가 교수님이 나눠준 강의 자료를 봤지만 전혀 내용이 이해가 가질 않습니다!!(즉, 실행명령어를 어디에 써야될지 하나도 모르겠음...)
가장 큰 문제는 인자를 받았을 때와 안받았을 때, 실행해야되는게 다른데, 인자를 어떻게 줘야 될지 조차 난감한 상황입니다...
모자란 리눅스 초짜좀 도와주세요~
if 문을 활용하세요
if 문을 사용 하셔서 인자의 값을 판단 하시면 되요
$# 명령어 라인에 입력된 인수(Argument)의 총 개수가 저장됨
이렇게 되는거니까 $# 에 값이 0 이면 인자가 없는 거니까 if 문을 사용하셔서 하시면 될듯하네요
=============
한글닉 논리에러
영문닉 LogicE
=============
한글닉 논리에러
영문닉 LogicE
if문을 활용하는것까진 됐습니다.
2번에서 case문을 이용해 열심히 해보고 있는데 도대체 왜 [a-z]를 하면 대문자까지 같이 인식이 되버리는 걸까요....
#!/bin/bash
stop=0;
while [ $stop -eq 0 ]
do
echo "Press any key and hit ENTER. To stop, enter @ : "
read string
case $string in
[a-z] ) echo "lowercase";;
[A-Z] ) echo "uppercase";;
[0-9] ) echo "digit";;
"@" ) stop=1;;
*) echo "other";;
esac
done
Z말고는 다 lowercase라고 떠요. 이젠 별 이상한곳에서 헤매고 있습니다. 도와주세요... ㅠ
[a-z] 와 [A-Z] 의 위치를 바꾸니 잘 돌아가는듯 합니다
[a-z] ) echo "lowercase";;
[A-Z] ) echo "uppercase";;
이 두줄을
[A-Z] ) echo "uppercase";;
[a-z] ) echo "lowercase";;
이렇게 바꾸면 잘 돌아가는것 같은데요?
=============
한글닉 논리에러
영문닉 LogicE
=============
한글닉 논리에러
영문닉 LogicE
저도 방금 돌려봤는데요....
여전히 잘 돌아가지 않습니다... ㅠ
이젠 a빼고는 다 uppercase랍니다.... ㅠㅠ
결국 일일히 다 적었습니다....ㅠ
셈플
*http://yh-me.org
과제라 답은 그렇고 아래 스크립트 분석해보세요 도움이 될겁니다.
#!/bin/bash
while true
do
echo -e "input:"
read str
if [ `expr match "$str" ".*my.*"` != "0" ]; then
echo "there";
else
echo "no there";
fi;
done
http://yh-me.org
으어... 3번에서 마지막에 정렬이 어렵군요.
출력까진 어떻게 되는데 출력된거를 정렬시켜야 된답니다. 젠장.
$./multi 7
multiplication table x * y
y= 1 2 3 4 5 6 7 8 9
=======================================
x=1 1 2 3 4 5 6 7 8 9
x=2 2 4 6 8 10 12 14 16 18
x=3 3 6 9 12 15 18 21 24 27
x=4 4 8 12 16 20 24 28 32 36
x=5 5 10 15 20 25 30 35 40 45
x=6 6 12 18 24 30 36 42 48 54
x=7 7 14 21 28 35 42 49 56 63
이런 방식으로 정렬까지 완벽히 해야된다는군요.
아 젠장 거의 다 왔는데... 여기서 막히네요... ㅠ
댓글 달기