셸 연습 문제 의 bash 지식 점 (for 순환, if 판단 문 구조 연습)

4110 단어
bash 지식 포인트: 파일 테스트 [] [[]]test 단일 항목 테스트: - e file: 파일 이 - a file 이 있 는 지 테스트 합 니 다. - f file 이 있 는 지 테스트 합 니 다. 일반 파일 - d 디 렉 터 리 인지 테스트 합 니 다. 디 렉 터 리 파일 - h file 인지 테스트 합 니 다. 링크 파일 - r somefile 인지 테스트 합 니 다. 유효한 사용자 가 이 파일 에 읽 기 권한 이 있 는 지 테스트 합 니 다 - w somefile: 유효한 사용자 가 이 파일 에 쓰기 권한 이 있 는 지 테스트 합 니 다 - x somefile: 유효한 사용자 가 이 파일 에 실행 권한 이 있 는 지 테스트 합 니 다.
-b somefile : 测试文件是否存在并且是否为一个块设备文件
-c somefile : 测试文件是否存在并且是否为一个字符设备文件
-h|-L somefile : 测试文件是否存在并且是否为符号链接文件
-p somefile : 测试文件是否存在并且是否为管道文件:
-S somefile : 测试文件是否存在并且是否为套接字文件:
-s somefile:  测试文件是否存在并且不空

두 항목 테스트: file 1 - nt file 2: file 1 이 file 2 보다 file 1 - ot file 2 를 업데이트 하 는 지 테스트 합 니 다. file 1 이 file 2 보다 더 늙 었 는 지 테스트 합 니 다.
스 크 립 트 에 source 명령 을 사용 하여 다른 파일 [- r 프로필] & & cource 프로필 을 불 러 옵 니 다.
bash 지식 포인트: 위치 매개 변수 교대 shift
연습 문제: 1. 스 크 립 트 를 편집 하여/tmp 디 렉 터 리 에 이 디 렉 터 리 가 있 는 지 판단 하고 있 으 면 종료 하고 없 으 면 디 렉 터 리 를 만 듭 니 다 11) 명령 행 에서 다음 명령 을 수행 합 니 다: fileName =/tmp/1 [- e $fileName] | mkdir $fileName
설명: 1. 변수 fileName =/tmp/12. [] 의 괄호 안에 - e 는 디 렉 터 리/tmp 에 디 렉 터 리 1 이 있 으 면 true (진짜) 이 고, 그렇지 않 으 면 false (가짜) 3. true (진짜) 이면 뒤의 mkdie $fileName 을 실행 하지 않 고 false (가짜) 이면 실행 합 니 다.
2...................................................................................root@localhost scripts]# vim myscripts.conf
userName=tomfileName=/etc/passwd
2.2 myscript. sh 스 크 립 트 작성 시작 [root@localhost scripts]# vim myscripts.sh#!/bin/bashsource/tmp/scripts/myscripts.confecho $userName
* * 2.3 myscript. sh 스 크 립 트 에 정의 * *\#!/bin/bash\# configfile:/temp/scripts/myscript. conf [- r/tmp/script/myscript. conf] & & source/tmp/scripts/myscript. conf\# source 를 사용 할 수 있 습 니 다. userName = ${userName = Jerry} echo $userName
설명: 1. my script s. conf 프로필 만 들 기 2. vim 으로 my script s. sh 스 크 립 트 편집 3. 설명 추가, 파일 디 렉 터 리 경로 설정 4. [- r 파일 절대 경로] 를 사용 하여 파일 이 존재 하 는 지 판단 합 니 다.\# - r 는 현재 사용자 가 파일 을 읽 을 수 있 는 권한 이 있 는 지 여 부 를 표시 합 니 다.(진짜) 그러면 source 나. myscript. conf 설정 파일 을 호출 하고 myscript. conf 의 userName 변수 내용 을 출력 합 니 다 6. 앞 에 false (가짜) 이면 무시 합 니 다. 스 크 립 트 에 정 의 된 변수 내용 을 직접 출력 합 니 다 (출력 내용: Jerry)
3. 스 크 립 트 를 작성 합 니 다./var/log 를/tmp/logs 로 복사 합 니 다. 스 크 립 트 를 작성 하기 전에 작은 테스트 를 할 수 있 습 니 다. [root@localhost scripts]# which wget/usr/bin/wget[root@localhost scripts]# echo $?0
설명: wich wget 을 이용 하여 이 wget 명령 이 존재 하지 않 는 지 판단 합 니 다.
스 크 립 트 vim download. sh 작성 완료 - n 스 크 립 트 문법 검사 (sh - n download. sh) [root@localhost scripts]# vim download.sh
#!/bin/bashurl='ftp://192.168.100.157/hzftp/IP%C9%A8%C3%E8%B9%A4%BE%DF.exe'which wget &>/dev/null || exit 5downloader= which wget [ -x$downloader ] || exit 6$downloader $url
설명: 1. url 2 를 추가 합 니 다. which 를 이용 하여 wget 저장 이 존재 하지 않 는 다 고 판단 하고 결 과 를 빈 상태 로 출력 합 니 다 (>/dev/null). 존재 하지 않 으 면 종료 합 니 다. 3. 변수 다운 로 더 를 which wget 4 로 정의 한 다음 [- x] 를 이용 하여 현재 사용자 가 다운 로 더 에 대한 실행 권한 이 있 는 지, 없 으 면 종료 합 니 다. $downloader $url 을 실행 합 니 다.(효 과 는 wgetftp://192.168.100.157/hzftp/IP%C9%A8%C3%E8%B9%A4%BE%DF.exe)
4. 스 크 립 트 를 작성 하여 다음 작업 을 수행 합 니 다. 1. 각각/var/log 의 파일 을/tmp/logs 디 렉 터 리 에 복사 합 니 다. 2. 디 렉 터 리 를 복사 할 때 만 cp - r3. 파일 을 복사 할 때 cp4. 링크 파일 을 복사 하고 cp - d5 를 사용 합 니 다. 다른 파일 이 라면 cp - a 를 사용 합 니 다.
[root@localhost scripts]# vim cplog.shs
 copyCommand='cp'

elif [ -f $fileName ]; then#!/bin/bash#targetDir='/tmp/logs'
[ -e $targeDir ] || mkdir $targeDirfor fileName in/var/log/*;doif [ -d $fileName ]; thencopyCommand='cp -r'elif [ -f $fileName ]; thencopyCommand='cp' elif [ -h $fileName ]; thencopyCommand='cp -d'elsecopyCommand='cp -a'fi
$copyCommand $fileName $targetDirdone
설명: 1. 변수 대상 디 렉 터 리 편집 (targetDir) 2. 대상 디 렉 터 리 의 존재 여 부 를 판단 하고 존재 하지 않 으 면 3. for 순환 문 구 를 만 듭 니 다 (/var/log 아래 모든 파일 을 복사) 4. if 판단 문 ([- d] 대응 디 렉 터 리 파일, [- f] 대응 일반 파일, [- h] 대응 링크 문서, [- a] 대응 다른 파일 5. 변 수 를 선착순 으로 배열 합 니 다.(명령 파일 대상 디 렉 터 리 복사) ~ ~ ~ ~ 5. 스 크 립 트 를 작성 하여 다음 작업 을 수행 합 니 다 script. sh {start | stip | restart | status} 비어 있 으 면 도움말 정보 script. sh {start | stip | restart | status}
다음으로 전송:https://blog.51cto.com/13233089/2107371

좋은 웹페이지 즐겨찾기