셸 -- 파일 조작 1
함수 detect 를 정의 합 니 다. 하위 디 렉 터 리 로 재 귀적 으로 작업 할 수 있 도록 합 니 다.
이 어 'ls $1' 을 반복 한 결과, $1 은 첫 번 째 입력 매개 변수 이 며, 경 로 를 찾 습 니 다.
순환 중, 먼저 파일 이 디 렉 터 리 파일 인지 아 닌 지 를 판단 하고, 만약 그렇다면, 안쪽 으로 귀속 하고,
그렇지 않 으 면 wc 명령 으로 파일 의 줄 수 를 얻 고, cut 명령 으로 wc 결과 의 줄 수 를 얻 으 며, 마지막 으로 결 과 를/home/user/shell/resl. txt 에 저장 하면 됩 니 다.
마지막 으로 이 함 수 를 호출 하 세 요.
#!/bin/sh
function detect(){
for file in `ls $1`
do
if [ -d $1"/"$file ]
then
detect $1"/"$file
else
wc -L $1"/"$file | cut -d' ' -f 1-2>> /home/user/shell/result.txt
fi
done
}
path="/home/user/"
detect $path
wc 명령
wc 즉 wordcount 로 파일 에 대한 정 보 를 통계 할 수 있 습 니 다.
그래서 15 를 받 으 려 면 컷 명령 을 사용 해 야 돼 요.
ls - l | wc - l 현재 경로 에서 파일 총 수 를 통계 할 수 있 습 니 다.
cut 명령
a x dd
bb x zz
ccc x dd
root@ubuntu:/home/user/shell# cut -d'x' -f2 ls
dd
zz
dd
root@ubuntu:/home/user/shell# cut -d'x' -f1,2 ls
a x dd
bb x zz
ccc x dd
root@ubuntu:/home/user/shell# cut -d' ' -f1-3 ls
a x dd
bb x zz
ccc x dd
- d 뒤 에는 '따옴표 안에 사용자 정의 구분자 가 채 워 져 있 습 니 다. 위 에 문자 x 와 빈 칸 을 실험 하 였 습 니 다. - f 뒤 에는 숫자 와 함께 출력 영역 을 표시 합 니 다.
출력 영역 이 연속 적 인 두 영역 이 라면 분리 자 는 출력 할 때 도 출력 됩 니 다!변 수 를 분할 입력 으로 하려 면 어떻게 써 야 합 니까?echo 명령 으로
var="abc x ec x dd"
echo $var | cut -d'x' -f1,2
abc x ec
파일 을 입력 하려 면 마지막 에 파일 경 로 를 추가 하면 됩 니 다!
root@ubuntu:/home/user/shell# cut -c 1-5 /home/user/shell/ls
a x d
bb x
ccc x
2. 파일 을 읽 고 줄 마다 옮 겨 다 니 기
다음 파일 을 읽 고 줄 마다 옮 겨 다 니 며 줄 마다 첫 번 째 숫자 를 가 져 온 후 누적 합 니 다.
#!/bin/sh
path="/home/user/shell/result.txt"
sum=0
while read myline
do
num=`echo $myline |cut -d' ' -f1`
echo $num
sum=`expr $num + $sum`
done < $path
echo "sum is "$sum
이것 은 일종 의 방식 이다. 즉,while read line
do
done < file
아래 와 같은 방식 으로 모두 가능 하 다.
cat file | while read line
do
done
이상 하 게 도 위 에서 이 스 크 립 트 를 실행 하고 마지막 으로 출력 한 sum 은 0 입 니 다. 부 은 줄 모 르 고 이상 합 니 다!순환 안의 갑 작 스 러 운 부분 변수 가 된 것 일 까?그리고 고치 면 소 용 없어 요?
3. 폴 더 의 파일 접미사 이름 을 bat 로 변경
이름 변경 은 뮤 직 비디오 로 작 동 합 니 다. 뮤 직 비디오 작업 은 이름 을 바 꾸 거나 파일 을 이동 할 수 있 습 니 다.
#!/bin/sh
path="/home/user/data"
for file in `ls $path`
do
new_file=${file%.*}".bat"
if [ ! -e $path"/"$new_file ]
then
mv $path"/"$file $path"/"$new_file
fi
tmp=$(date +%Y%m%d:%H%M%S)
tmp2=`date +%Y`
echo $tmp $tmp2
done
화면 음악 명령
mv [옵션] 원본 파일 이나 디 렉 터 리 대상 파일 이나 디 렉 터 리
화면 음악 명령 의 두 번 째 매개 변수 형식 이 다 릅 니 다 (대상 파일 입 니까? 대상 디 렉 터 리 입 니까?). 화면 음악 명령 은 파일 이름 을 바 꾸 거나 새 디 렉 터 리 로 옮 깁 니 다.두 번 째 매개 변수 형식 이 파일 일 때 뮤 직 비디오 명령 이 파일 이름 을 바 꿉 니 다. 이 때 원본 파일 은 하나 (원본 디 렉 터 리 이름 일 수도 있 습 니 다) 만 있 을 수 있 습 니 다. 원본 파일 이나 디 렉 터 리 를 주어진 대상 파일 이름 으로 바 꿉 니 다.두 번 째 매개 변수 가 존재 하 는 디 렉 터 리 이름 일 때 원본 파일 이나 디 렉 터 리 매개 변 수 는 여러 개 일 수 있 습 니 다. 뮤 직 비디오 명령 은 각 매개 변수 가 지정 한 원본 파일 을 대상 디 렉 터 리 로 옮 길 수 있 습 니 다.크로스 파일 시스템 에서 파일 을 이동 할 때 뮤 직 비디오 는 먼저 복사 한 다음 에 기 존 파일 을 삭제 하고 이 파일 로 연 결 된 링크 도 잃 어 버 립 니 다.
여러 파일 을 한 디 렉 터 리 로 이동 하면:
mv srcfile1 srcfile2 ... dstdir
혹은
mv -t dstdir srcfile1 srcfile2 ...
아래 와 같다
root@ubuntu:/home/user/shell# ls
d.sh ls result.txt t2.sh test2.sh t.sh
root@ubuntu:/home/user/shell# mkdir dir
root@ubuntu:/home/user/shell# mv t.sh t2.sh dir
root@ubuntu:/home/user/shell# ls
dir d.sh ls result.txt test2.sh
root@ubuntu:/home/user/shell# ls dir
t2.sh t.sh
root@ubuntu:/home/user/shell# cd dir
root@ubuntu:/home/user/shell/dir# ls ../
dir d.sh ls result.txt test2.sh
root@ubuntu:/home/user/shell/dir# mv -t ../ t.sh t2.sh
root@ubuntu:/home/user/shell/dir# ls
root@ubuntu:/home/user/shell/dir# ls ../
dir d.sh ls result.txt t2.sh test2.sh t.sh
root@ubuntu:/home/user/shell/dir#
차단 명령
${file#*/}: 첫 번 째/왼쪽 문자열 제거: dir 1/dir 2/dir 3/my. file. txt
${file##*/}: 마지막/왼쪽 문자열 제거: my. file. txt
${file#*.}: 첫 번 째. 왼쪽 문자열 빼 기: file. txt
${file##*.}: 마지막 문자열 을 제거 합 니 다. 왼쪽 문자열: txt
${file%/*}: 마지막/오른쪽 문자열 제거:/dir 1/dir 2/dir 3
${file%%/*}: 첫 번 째/오른쪽 문자열 을 제거 합 니 다: (빈 값)
${file%.*}: 마지막 문자열 을 제거 합 니 다. 오른쪽 문자열:/dir 1/dir 2/dir 3/my. file
${file%%. *}: 첫 번 째 문자열 을 제거 합 니 다. 오른쪽 문자열:/dir 1/dir 2/dir 3/my
기억의 방법 은:
#왼쪽 을 빼 는 거 예요.
%오른쪽 을 빼 는 거 예요.%% 첫 번 째.
쓰 는 순서 에 주의 하 세 요. * 왼쪽 에 놓 는 지 오른쪽 에 놓 는 지 * 와% 에 따라 달라 집 니 다. * 라면 왼쪽 을 자 르 기 때문에 왼쪽 에 놓 고% 오른쪽 을 자 르 기 때문에 오른쪽 에 놓 습 니 다.
날짜 명령
포맷 에 있 는 +% Y..., + 번호 뒤에% 를 바짝 붙 여 주세요. 그렇지 않 으 면 오류 가 발생 합 니 다!위의 예 는 바로 년 월 일: 시 분 초 이다.
4. 파일 이름 을 입력 하여 현재 디 렉 터 리 에 존재 하 는 지 여 부 를 판단 합 니 다.
#!/bin/sh
filepath=$(pwd)
echo $filepath
echo "read a file name:"
read name
if [ -e $filepath"/"$name ]
then
echo "exist"
else
echo "not exist"
fi
현재 디 렉 터 리 는 pwd 명령 으로 얻 을 수 있 습 니 다. $() 명령 의 결 과 를 얻 을 수 있 습 니 다.
예 를 들 어 $(expr 1 + 2)
나 는 현재 디 렉 터 리 를 가 져 오 라 는 명령 을 본 적 이 있다. $0 은 현재 스 크 립 트 파일 이름 이지 만 실제로 실 행 될 때, 예 를 들 어 나 는 t. sh 이다.
실행 중 명령 을 두 드 립 니 다./t. sh
그러면 $0 은.../t. sh 입 니 다. 그래서 $(dirname $0) 는 바로 "..."입 니 다. 바로 현재 디 렉 터 리 잖 아 요.그럼 cd 는 무슨 의미 가 있 을까요?이상 하 네.
좋 습 니 다. 확실히 의미 가 있 습 니 다. 예 를 들 어 제 셸 파일 은/home/user/shell 에 놓 여 있 습 니 다.
이 셸 파일 을/home/user 에서 실행 합 니 다.
#!/bin/sh
filepath=$(dirname $0)
echo $filepath
cd $(dirname $0)
filepath2=$(pwd)
echo $filepath2
pwd
echo "read a file name:"
read name
if [ -e $filepath2"/"$name ]
then
echo "exist"
else
echo "not exist"
fi
root@ubuntu:/home/user# ./shell/t.sh
./shell
/home/user/shell
/home/user/shell
read a file name:
t.sh
exist
$0 은.../shell/t. sh 이기 때문에 dirname $0 은.../shell, cd./shell 도 셸 디 렉 터 리 에 들 어 갑 니 다.
"."는 현재 디 렉 터 리 이 고 셸 은 현재 디 렉 터 리 의 하위 디 렉 터 리 이기 때문에 현재 디 렉 터 리 의 셸 하위 디 렉 터 리 에 들 어 갑 니 다.
cd/shell 로 쓰 면 "/"는 루트 디 렉 터 리 를 대표 합 니 다!!
cd.. 현재 디 렉 터 리 에 들 어 가 는 부모 디 렉 터 리 입 니 다.
실행 중인 해유 의 이상 한 문 제 는 내 가 cd 명령 과 pwd 명령 을 합 쳐 쓰 면 cd 명령 이 실행 되 지 않 는 다 는 것 이다. 이상 하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.