두 개의 상세한 셸 실례 코드
5089 단어 shell
#!/bin/sh
# vim: set sw=4 ts=4 et:
help()
{
cat < b2h -- convert binary to decimal
USAGE: b2h [-h] binarynum
OPTIONS: -h help text
EXAMPLE: b2h 111010
will return 58
HELP
exit 0
}
error()
{
# print an error and exit
echo "$1"
exit 1
}
lastchar()
{
# return the last character of a string in $rval
if [ -z "$1" ]; then
# empty string
rval=""
return
fi
# wc puts some space behind the output this is why we need sed:
numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
# now cut out the last char
rval=`echo -n "$1" | cut -b $numofchar`
}
chop()
{
# remove the last character in string and return it in $rval
if [ -z "$1" ]; then
# empty string
rval=""
return
fi
# wc puts some space behind the output this is why we need sed:
numofchar=`echo -n "$1" | wc -c | sed 's/ //g' `
if [ "$numofchar" = "1" ]; then
# only one char in string
rval=""
return
fi
numofcharminus1=`expr $numofchar "-" 1`
# now cut all but the last char:
rval=`echo -n "$1" | cut -b 0-${numofcharminus1}`
}
while [ -n "$1" ]; do
case $1 in
-h) help;shift 1;; # function help is called
--) shift;break;; # end of options
-*) error "error: no such option $1. -h for help";;
*) break;;
esac
done
# The main program
sum=0
weight=1
# one arg must be given:
[ -z "$1" ] && help
binnum="$1"
binnumorig="$1"
while [ -n "$binnum" ]; do
lastchar "$binnum"
if [ "$rval" = "1" ]; then
sum=`expr "$weight" "+" "$sum"`
fi
# remove the last position in $binnum
chop "$binnum"
binnum="$rval"
weight=`expr "$weight" "*" 2`
done
echo "binary $binnumorig is decimal $sum"
#
이 스크립트가 사용하는 알고리즘은 10진법과 2진수 권한 값(1,2,4,8,16,...)을 이용하여예를 들어 2진법'10'은 이렇게 10진법으로 변환할 수 있다. 0 * 1 + 1 * 2 = 2는 하나의 2진수를 얻기 위해lastchar 함수를 사용했다.이 함수는 wc를 사용합니까?c 문자 수를 계산한 다음cut 명령을 사용하여 마지막 문자를 꺼냅니다.Chop 함수의 기능은 마지막 문자를 제거하는 것입니다.파일 순환 프로그램은 보내는 모든 메일을 파일에 저장하고 싶은 사람들 중 한 명일지도 모르지만, 몇 달이 지나면 파일에 대한 접근 속도가 느려질 수 있습니다.다음 스크립트rotatefile에서 이 문제를 해결할 수 있습니다.이 스크립트는 메일 저장 파일 (outmail이라고 가정) 을 outmail로 바꿀 수 있습니다.1, 그리고 outmail.1은 아웃메일이 됩니다.2, 잠깐만, 잠깐만..
#!/bin/sh
# vim: set sw=4 ts=4 et:
ver="0.1"
help()
{
cat < rotatefile -- rotate the file name
USAGE: rotatefile [-h] filename
OPTIONS: -h help text
EXAMPLE: rotatefile out
This will e.g rename out.2 to out.3, out.1 to out.2, out to out.1
and create an empty out-file
The max number is 10
version $ver
HELP
exit 0
}
error()
{
echo "$1"
exit 1
}
while [ -n "$1" ]; do
case $1 in
-h) help;shift 1;;
--) break;;
-*) echo "error: no such option $1. -h for help";exit 1;;
*) break;;
esac
done
# input check:
if [ -z "$1" ] ; then
error "ERROR: you must specify a file, use -h for help"
fi
filen="$1"
# rename any .1 , .2 etc file:
for n in Array 8 7 6 5 4 3 2 1; do
if [ -f "$filen.$n" ]; then
p=`expr $n + 1`
echo "mv $filen.$n $filen.$p"
mv $filen.$n $filen.$p
fi
done
# rename the original file:
if [ -f "$filen" ]; then
echo "mv $filen $filen.1"
mv $filen $filen.1
fi
echo touch $filen
touch $filen
이 스크립트는 어떻게 작동합니까?사용자가 파일 이름을 제공한 것을 검사한 후에, 우리는 Array에서 1로 순환합니다.파일 Array는 10, 파일 8은 Array로 이름을 바꿉니다.순환이 끝나면 원본 파일을 파일 1로 명명하고 원본 파일과 같은 이름의 빈 파일을 만듭니다.디버깅의 가장 간단한 디버깅 명령은 당연히 echo 명령을 사용하는 것이다.echo를 사용하여 오류가 의심되는 곳에서 변수 값을 출력할 수 있습니다.이것도 절대 다수의 셸 프로그래머들이 80%의 시간을 들여 프로그램을 디버깅해야 하는 이유이다.셸 프로그램의 장점은 다시 컴파일할 필요가 없고, 에코 명령을 삽입하는 데도 시간이 얼마 걸리지 않는다는 것이다.셸도 실제 디버깅 모드가 있습니다.스크립트 "strangescript"에 오류가 있으면, 디버깅을 할 수 있습니다:sh-xstrangescript 이 스크립트를 실행하고 모든 변수의 값을 표시합니다.셸은 스크립트를 실행하지 않고 문법만 검사하는 모드가 있습니다.이렇게 사용할 수 있습니다:sh-n your_script는 모든 문법 오류를 되돌려줍니다.우리는 당신이 지금 당신의 셸 스크립트를 쓰기 시작할 수 있기를 바랍니다. 당신이 즐겁게 놀기를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.