산 선 에 게 셸 프로 그래 밍 배우 기 (1)
앞에서 산 선 은 리 눅 스 기반 셸 명령 시리즈 의 블 로 그 를 완 공 했 습 니 다. 만약 에 Liux 기반 의 친구 가 없다 면 셸 명령 부터 공부 하 는 것 을 권장 합 니 다. 일정한 기초 가 있 으 면 바로 뛰 어 넘 을 수 있 습 니 다.이 편 에서 산선 이 써 야 할 것 은 셸 프로 그래 밍 시리즈 에 관 한 지식 이다.
앞에서 우리 의 예 에서 명령 은 대체적으로 하나의 명령 으로 실 행 된 것 이다. 그러나 Liux 에서 명령 을 하나의 스 크 립 트 로 조합 하여 발휘 하 는 역할 만 이 큰 것 이다. 이것 은 벽돌 과 비슷 해서 쓸모 가 없 지만 벽돌 을 많이 사용 하면 우 리 는 큰 빌딩 을 지 을 수 있다. 그러면 그들의 가 치 를 나 타 낼 수 있다.
Liux 에서 우 리 는 분점 을 사용 하여 두 개의 명령 을 나 눌 수 있 습 니 다.
[root@h1 ~]# who ;date
root pts/0 2014-08-08 02:55 (192.168.46.22)
2014 08 08 03:39:43 CST
[root@h1 ~]#
스 크 립 트 에서 도 실행 할 수 있 습 니 다. 셸 스 크 립 트 를 만 드 는 머리 생명 은 보통\#!/bin/bash 시작, 이 시작 을 제외 한 다른\# 시작 은 모두 주석 내용 입 니 다:
vi test. sh 스 크 립 트 편집
#!/bin/bash
#
date
who
[root@h1 ~]# sh test.sh
2014 08 08 03:46:15 CST
root pts/0 2014-08-08 02:55 (192.168.46.22)
[root@h1 ~]#
두 가지 호출 방법 은 권한 이 없습니다. 권한 을 부여 할 수 있 습 니 다.
[root@h1 ~]# sh test.sh
2014 08 08 03:46:15 CST
root pts/0 2014-08-08 02:55 (192.168.46.22)
[root@h1 ~]# ./test.s
-bash: ./test.s:
[root@h1 ~]# ./test.sh
-bash: ./test.sh:
[root@h1 ~]# chmod u+x test.sh
[root@h1 ~]# ll
328476
-rw-r--r-- 1 root root 143775368 7 28 19:30 abc1.txt
-rw-------. 1 root root 1087 6 13 19:06 anaconda-ks.cfg
-rw-r--r-- 1 root root 52 7 31 21:29 count2.txt
-rw-r--r-- 1 root root 52 7 31 19:46 count.txt
-rw-r--r--. 1 root root 96183833 6 9 17:27 hadoop-2.2.0.tar.gz
-rw-r--r-- 1 root root 1 7 31 21:25 hh.txt
drwxr-xr-x 3 root root 4096 7 29 04:47 hivesrc
-rw-r--r--. 1 root root 2111 6 16 13:10 initserver.sh
-rw-r--r--. 1 root root 7995 6 13 19:06 install.log
-rw-r--r--. 1 root root 3384 6 13 19:06 install.log.syslog
drwxr-xr-x 2 root root 4096 7 31 21:19 intest
lrwxrwxrwx 1 root root 12 7 31 21:45 jdk -> jdk1.7.0_25/
drwxr-xr-x. 8 search 143 4096 6 6 2013 jdk1.7.0_25
-rwx------. 1 root root 96316511 11 20 2013 jdk-7u25-linux-x64.gz
drwxr-xr-x 3 root root 4096 7 31 21:33 li
drwxr-xr-x 3 root root 4096 7 9 04:08 lo
drwxr-xr-x 3 root root 4096 7 9 04:08 login
-rw-r--r-- 1 root root 1048 6 19 03:31 setlimit.sh
drwxr-xr-x 2 root root 4096 8 5 01:44 test
drwxr-sr-x 2 root abc 4096 8 6 01:53 testidr
-rwxr--r-- 1 root root 46 8 8 03:43 test.sh
drwxr-xr-x 3 root root 4096 6 20 02:51 tsethadoop
[root@h1 ~]# ./test.sh
2014 08 08 03:47:10 CST
root pts/0
JAVA 의 System. out. println () 기능 과 같은 텍스트 를 어떻게 출력 하 는 지, Liux 의 echo 가 이 기능 을 제공 합 니 다.
문자열 에 작은 따옴표 가 나타 나 면 작은 따옴표 로 묶 고, 작은 따옴표 가 나타 나 면 작은 따옴표 로 묶 고, 작은 따옴표 가 나타 나 도 작은 따옴표 가 나타 나 면\\전의:
[root@h1 ~]# echo "a's dog"
a's dog
[root@h1 ~]# echo "a's"" dog"
a's dog
[root@h1 ~]# echo "a's"abc" dog"
a'sabc dog
[root@h1 ~]# echo "a's\"abc\" dog"
a's"abc" dog
[root@h1 ~]# echo 'a 'dog' "abc"'
a dog "abc"
echo - n 인 자 는 마지막 줄 바 꾸 기 를 피 할 수 있 습 니 다. System. out. print () 와 유사 합 니 다.
echo -n "conent:"
date
[root@h1 ~]# sh a.sh
conent:2014 08 08 04:00:14 CST
echo 는 문자열 에서 Liux 환경 변 수 를 사용 하여 정확하게 출력 할 수 있 습 니 다.
[root@h1 ~]# echo "my home is $HOME"
my home is /root
[root@h1 ~]#
사용자 변 수 는 등호 대 가 를 통 해 정 의 됩 니 다. 등호 좌우 에 빈 칸 이 있 으 면 안 됩 니 다. 변수 이름 은 대소 문 자 를 구분 합 니 다.
[root@h1 ~]# more a.sh
name=" "
echo "info: $name"
[root@h1 ~]# sh a.sh
info:
[root@h1 ~]#
변수 간 할당:
[root@h1 ~]# more a.sh
name=" "
name2=$name
echo "info: $name2"
[root@h1 ~]# sh a.sh
info:
[root@h1 ~]#
셸 명령 을 변수 에 할당 하고, 인덱스 를 사용 합 니 다:
[root@h1 ~]# more b.sh
test=`date;who`
echo -n " , :"
echo $test
[root@h1 ~]# sh b.sh
, :2014 08 08 04:14:37 CST root pts/0 2014-08-08 02:55 (192.168.46.22)
[root@h1 ~]#
자바 스 크 립 트 의 eval 키워드 와 같은 반 따옴표 기능 으로 문자열 명령 을 해석 할 수 있 습 니 다.
이 를 통 해 우 리 는 파일 을 만 들 때 시간 이름 을 붙 일 수 있 습 니 다.
[root@h1 ~]# more c.sh
# date ,
filename=`date +%y%m%d`
echo " " > log.$filename
[root@h1 ~]# more log.140808
[root@h1 ~]#
출력 리 셋 명령:
> 덮어 쓰기 모드 재 설정
>> 추가 모드 재 설정
리 셋 명령 입력
<
내 연 입력 재 설정
<<
출력 재 설정 은 여러분 이 많이 사용 할 것 이 라 고 믿 습 니 다. 입력 한 재 설정 은 많이 사용 되 지 않 을 수 있 습 니 다. 다음 산 선 은 몇 가지 예 를 들 어 보 겠 습 니 다.
[root@h1 ~]# wc < a.sh
8 5 65
[root@h1 ~]#
출력 방향 을 바 꾸 면 파일 의 내용 을 명령 에 보 내 통계 할 수 있 습 니 다.
이 세 가지 숫자의 의 미 는 텍스트 의 줄 수, 단어 수, 바이트 크기 를 나타 낸다. 설명 은 8 줄, 5 단어, 65 바이트 가 있다.
내 연 재 는 방향 을 바 꾸 고 상호작용 적 인 읽 기 를 허용 합 니 다. 정 의 된 시작 부분 과 끝 문자 사이 에 통 계 를 추가 하여 통 계 를 합 니 다.
[root@h1 ~]# wc << B
> a b 1
> d c 2
> B
2 6 12
[root@h1 ~]#
끝 부 호 는 마음대로 정의 할 수 있 습 니 다. 산 선 은 여기 서 B 입 니 다.
다음은 파이프 명령: |
[root@h1 ~]# rpm -qa | sort
acl-2.2.49-6.el6.x86_64
attr-2.4.44-7.el6.x86_64
audit-2.2-2.el6.x86_64
audit-libs-2.2-2.el6.x86_64
authconfig-6.1.12-13.el6.x86_64
b43-openfwwf-5.2-4.el6.noarch
basesystem-10.0-4.el6.noarch
bash-4.1.2-15.el6_4.x86_64
binutils-2.20.51.0.2-5.36.el6.x86_64
bridge-utils-1.2-10.el6.x86_64
bzip2-1.0.5-7.el6_0.x86_64
bzip2-libs-1.0.5-7.el6_0.x86_64
ca-certificates-2013.1.94-65.0.el6.noarch
centos-release-6-5.el6.centos.11.1.x86_64
checkpolicy-2.0.22-1.el6.x86_64
chkconfig-1.3.49.3-2.el6_4.1.x86_64
coreutils-8.4-31.el6.x86_64
coreutils-libs-8.4-31.el6.x86_64
cpio-2.10-11.el6_3.x86_64
rpm - qa 는 설 치 된 패 키 지 를 조회 한 다음 sort 명령 으로 정렬 할 수 있 습 니 다.
리 셋 명령 은 여러 개 를 사용 할 수 있 습 니 다:
[root@h1 ~]# ll | more | sort
drwxr-sr-x 2 root abc 4096 8 6 01:53 testidr
drwxr-xr-x 2 root root 4096 7 31 21:19 intest
drwxr-xr-x 2 root root 4096 8 5 01:44 test
drwxr-xr-x 3 root root 4096 6 20 02:51 tsethadoop
drwxr-xr-x 3 root root 4096 7 29 04:47 hivesrc
drwxr-xr-x 3 root root 4096 7 31 21:33 li
drwxr-xr-x 3 root root 4096 7 9 04:08 lo
drwxr-xr-x 3 root root 4096 7 9 04:08 login
drwxr-xr-x. 8 search 143 4096 6 6 2013 jdk1.7.0_25
lrwxrwxrwx 1 root root 12 7 31 21:45 jdk -> jdk1.7.0_25/
-rw-------. 1 root root 1087 6 13 19:06 anaconda-ks.cfg
-rw-r--r-- 1 root root 1048 6 19 03:31 setlimit.sh
-rw-r--r-- 1 root root 127 8 8 04:20 c.sh
-rw-r--r-- 1 root root 143775368 7 28 19:30 abc1.txt
-rw-r--r-- 1 root root 1 7 31 21:25 hh.txt
-rw-r--r--. 1 root root 2111 6 16 13:10 initserver.sh
-rw-r--r-- 1 root root 25 8 8 04:20 log.140808
-rw-r--r--. 1 root root 3384 6 13 19:06 install.log.syslog
-rw-r--r-- 1 root root 52 7 31 19:46 count.txt
-rw-r--r-- 1 root root 52 7 31 21:29 count2.txt
-rw-r--r-- 1 root root 65 8 8 04:11 a.sh
-rw-r--r--. 1 root root 7995 6 13 19:06 install.log
-rw-r--r-- 1 root root 90 8 8 04:14 b.sh
-rw-r--r--. 1 root root 96183833 6 9 17:27 hadoop-2.2.0.tar.gz
-rwx------. 1 root root 96316511 11 20 2013 jdk-7u25-linux-x64.gz
-rwxr--r-- 1 root root 46 8 8 03:43 test.sh
328492
[root@h1 ~]#
다음은 셸 에서 수학 연산 을 수행 하 는 방법 을 살 펴 보 자.
[root@h1 ~]# expr 1+5
1+5
[root@h1 ~]# expr 1 + 5
6
[root@h1 ~]# expr 1 * 8
expr:
[root@h1 ~]# expr 1 \* 8
8
[root@h1 ~]# expr 9 / 3
3
[root@h1 ~]# expr 9 / 5
1
[root@h1 ~]#
expr 뒤에 표현 식 이 있 습 니 다. 연산 식 좌우 에 빈 칸 이 있어 야 합 니 다.
이것 은 비교적 전통 적 인 용법 입 니 다. Liux 에는 계산기 bc 모듈 이 있 을 수 있 습 니 다. Liux 시스템 에 없 으 면 yum install bc 명령 으로 설치 하 십시오.
[root@h1 ~]# bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
12 * 5.8
69.6
8 * 4 / 2
16
5 / 3
1
5 / 3.0
1
4.44 / 2
2
scale=4
3 / 8
.3750
10 / 11
.9090
scale=2
5 / 2
2.50
10 / 3
3.33
기본적으로 소 수 를 보류 하지 않 습 니 다. scale 을 통 해 소수점 위 치 를 설정 할 수 있 습 니 다.
마지막 으로 quit 명령 을 사용 하여 프로그램 을 종료 합 니 다.
스 크 립 트 에서 bc 명령 을 사용 하 는 방법 을 살 펴 보 겠 습 니 다.
[root@h1 ~]# more bc.sh
out=`echo "scale=4; 10 / 3" | bc`
echo " :$out"
[root@h1 ~]# sh bc.sh
:3.3333
[root@h1 ~]#
우 리 는 또한 결합 할 수 있 습 니 다. 내 연 재 는 bc 계산 기 를 사용 하여 스 크 립 트 에 있 습 니 다.
[root@h1 ~]# more cc.sh
var1=10.23
var2=9
var3=1
var4=`bc << EOF
scale=4
a1 = ($var1+$var2)
b1 = ($var2+$var3)
a1 + b1
EOF
`
echo " : $var4"
[root@h1 ~]# sh cc.sh
: 29.23
[root@h1 ~]#
스 크 립 트 종료 상태 코드 를 살 펴 보 겠 습 니 다.
변수 $를 사용 하 시 겠 습 니까?
[root@h1 ~]# date
2014 08 08 05:16:38 CST
[root@h1 ~]# echo $?
0
[root@h1 ~]# dates
-bash: dates: command not found
[root@h1 ~]# echo $?
127
[root@h1 ~]#
1, 0 은 성공 입 니 다.
2, 1 통용 되 는 알 수 없 는 오류
3, 126 대표 명령 실행 불가
4, 127 대표 가 명령 을 찾 지 못 했 습 니 다.
5, 128 잘못된 종료 매개 변수
6, 128 + xlinux 신호 x 의 심각 한 오류
7, 130 대표 명령 Ctrl + C 를 통 해 종료
8, 255 탈퇴 상태 코드 경계 넘 기
JAVA 프로 그래 밍 에서 우 리 는 System. exit 를 사용 하면 가상 컴퓨터 의 운행 을 중지 할 수 있다 는 것 을 알 고 있 습 니 다. 그러면 Liux 에서 도 JAVA 의 return 키워드 exit 와 같은 종료 방법 이 있 습 니 다.
[root@h1 ~]# more t.sh
echo " "
sleep 5
exit
echo " ?"
[root@h1 ~]# sh t.sh
[root@h1 ~]# echo $?
0
[root@h1 ~]#
물론 우 리 는 되 돌아 오 는 상태 코드 를 실행 할 수 있다.
[root@h1 ~]# cat t.sh
echo " "
sleep 5
exit 88
echo " ?"
[root@h1 ~]# sh t.sh
[root@h1 ~]# echo $?
88
[root@h1 ~]#
상태 코드 는 최대 255 이 고 255 가 넘 으 면 일률적으로 모델 링 을 받 을 수 있다 는 점 에 주의 하 셔 야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.