> 운영 및 유지보수 > 리눅스 운영 및 유지 관리 > 껍질이란 무엇입니까? 일반적인 유형의 쉘 소개

껍질이란 무엇입니까? 일반적인 유형의 쉘 소개

零下一度
풀어 주다: 2017-06-30 15:50:18
원래의
7046명이 탐색했습니다.
1. 소개
3. 작업 도구
4. while 루프
6.
1. 소개
1. 쉘이란
쉘은 사용자가 시스템과 상호작용하기 위한 인터페이스입니다. 쉘은 명령 해석기이자 고급 프로그래밍 언어입니다
2. 일반적인 쉘 유형
Bourne Shell(/usr/bin/sh 또는 /bin/sh)
Bourne Again Shell(/bin /bash)
C 셸(/usr/bin/csh)
K 셸(/usr/bin/ksh)
루트용 셸(/sbin/sh)
그 중 Bash는 일상 작업에서 널리 사용됩니다.
동시에 Bash는 대부분의 Linux 시스템의 기본 셸이기도 합니다.
3. 셸 제한 사항
1.1 특히 높은 실행 속도가 필요한 작업1.2 많은 양의 수학적 계산을 포함
1.3., 주요 응용 프로그램(데이터베이스, 웹 사이트 등)
1.4., 그래픽 또는 GUI 응용 프로그램 디자인
1.5., 하드웨어에 직접 액세스 필요
1.6., 폐쇄형 개발 소스 응용 프로그램(오픈 소스와 비교)
4. 기본
파일 시스템: Linux 파일 시스템은 디렉터리와 파일을 포함하는 계층적 조직 구조입니다. 맨 위에 있는 것을 루트 디렉터리(root 디렉터리)라고 합니다. , 기울임꼴 막대/는
을 의미합니다. 디렉토리: 디렉토리 항목을 포함하는 파일이며, 각 디렉토리 항목에는 파일 이름이 포함됩니다.
파일 이름: 디렉토리의 내용은 디렉토리 항목이라고 하며, 디렉토리 항목에는 다음이 포함됩니다. 파일 이름에는 슬래시와 널 문자(ASCII 값은 0) 두 문자만 사용할 수 없습니다. 슬래시는 경로에서 파일 이름을 구분하는 데 사용되며 널 문자는 경로의 끝을 나타내는 데 사용됩니다. . 파일 이름의 길이는 일반적으로 255자에 이릅니다.
경로: 슬래시로 구분된 일련의 파일 이름을 경로라고 합니다. 경로는 파일의 위치를 ​​나타내는 데 사용됩니다. 슬래시는 절대 경로라고 합니다. 그렇지 않으면 현재 작업 디렉터리에 상대적인 상대 경로입니다
반환 코드: 모든 명령에는 0-255 사이의 정수로 표시되는 반환 값이 있습니다. 스크립트는 명령이며 또한 스크립트의 함수에도 반환 값이 있습니다
스크립트를 종료하는 공식적인 방법은 다음과 같이 명시적으로 종료 [코드] 명령을 사용하는 것입니다. C 언어의 scanf와 유사하게 매개변수 할당을 완료하는 buildin 명령입니다.
변수뿐만 아니라 배열도 할당할 수 있습니다.
입력은 화면뿐 아니라 파일 설명자
2. 실습
# 읽기 a - -문자열을 입력하고 변수 a에 문자열을 할당합니다. # echo $a
hello world!!
# 읽기 이름 성별 연령 -- 3개의 변수에 값을 할당합니다. 동시에 입력 구분 기호는 공백 문자
zhangsan 남성 50
# unset name sex age --변수 삭제# IFS=';' --읽기의 입력 구분 기호를 ';'로 변경합니다
# vim test.sh
#!/bin/bash
prompt="이름을 입력하세요:"
read -p "$prompt" name
echo "Greetings $name"
3. 연산 도구
1. 간단한 수학 연산
# echo $((1+2**2-3*4/5%6)) --계산 결과를 화면에 출력
# a=$ ((1+2**2-3*4/5%6) ) --계산 결과를 변수 a
#에 할당합니다. ((a=1+2**2-3*4/5%6) ) --위와 동일# echo "scale=3;10/3" | bc --bc 계산기; 소수점 세 자리까지 유지
# echo "2^10" | 10번째 전력# awk 'BEGIN{print 1/3}' -- 이상한 계산
2. 난수 가져오기
# od -N4 -tu4 /dev/urandom | sed -n '1s/.* //p' --7자리 숫자 가져오기
# od - Ad -w24 -tu4 /dev/urandom --난수 가져오기
# od -tu8 /dev/urandom --난수 가져오기
# od -tu8 /dev/urandom | sed -r 's/^[0-9]+s+//' | sed -r 's/s+/n/g' |cut -b1-8 |sed -r -n '/^.{8}$/p' | sed 's/^/186/' |head -n5000 |vi - --10,000개의 전화번호 가져오기
# od -N40000 -tu4 /dev/urandom | -r 's/^[0-9]+(s+)?//' | sed -r 's/s+/n/g' | grep -vE '^s*$' > 임의의 숫자
# sed -r -n '/^.{8}$/p' 10k_random | head -n 100000 | sed 's/^/186/' >phone_num
3.
# seq 10 --1에서 10까지 가져오기
# seq 1 2 10 --1에서 10까지 가져오기, 단계 크기는 2
# seq 10 100 --10에서 100까지 가져오기
# seq 10 -1 1 - - 역순, 10에서 1
4. if/then example
1 문자 "a"가 "A"
# vim test.sh
#!/ bin/ bash
if [[ "a" = "A" ]]; then
if [ "a" = "A" ] then
 echo "a는 A와 같습니다"
else
echo " a no 같음 A"
fi
2. /root/test/test.sh가 존재하고 실행 권한이 있는지 확인하세요
# vim test.sh
#!/bin/bash
if test -x /root/test/test.sh;then
  echo "/root/test/test.sh 실행 가능"
fi
3 시스템에 루트 사용자가 있는지 확인합니다
# vim test .sh
#!/bin/bash
if grep -E --color=auto ^root: /etc/passwd; then
  echo "사용자 루트가 있습니다"
fi
4. 파일 유형을 결정합니다.
# vim test.sh
#!/bin/bash
function isSymbolicLink() {
  file=$1
 flag=$(ls -ld $file | cut -b1)
 test "$flag" = "1"
  return $?
}
file=$1
if isSymbolicLink $ file; then
 echo "기호 링크"
elif test -d $file; then
 echo "디렉터리 파일"
elif test -f $file then
echo "일반 파일"
elif test - b $file; then
 echo "특수 차단"
elif test -c $file; then
 echo "특수 문자"
elif test -p $file then
echo "명명된 파이프"
elif test -S $file; then
  echo "Socket"
else
Echo "Unkown"
fi
5. 입력 숫자의 크기를 결정합니다
# vim test.sh
#!/bin /bash
num=$1
if test "$num" -lt 10 ;then
 echo "작은 숫자"
elif test "$num" -lt 20;then
 echo "중간 숫자"
elif test " $num" -lt 30;then
 echo "큰 숫자"
else
 echo "매우 큰 숫자"
fi
6에서 숫자를 가져와서 지정된 문자열을 출력합니다. 크기
# vim test.sh
#!/bin/bash
echo -n "숫자 입력: "
숫자 읽기
if [ "$num" -lt 100 ]; then
echo "100보다 작음"
elif [ "$num" -ge 100 -a "$num" -lt 200 ]; then
echo "보다 큼 또는 같음 200보다 작음"
elif [ "$num" -ge 200 -a "$num" -lt 300 ]; then
echo "200보다 크거나 같고 300보다 작음"
else
echo "다른 숫자"
fi
5. wihle 루프
1. 이해
while 키워드 뒤의 명령 반환 코드를 테스트합니다. while 루프 본문의 명령은 0입니다. 루프 본문은 다음과 같습니다.
while [] --while 및 [ ] 명령을 실행하고 [ ] 명령의 반환 코드를 테스트합니다.
cat /filename | while read line    --while 및 then 읽기 명령을 실행하고 읽기 명령의 반환 코드를 테스트합니다. 반환 코드
do
......
done
2. 루프 제어 문
continue - 현재 루프를 종료하고 다음 루프를 시작합니다. one
break -- 현재 루프를 종료하고 루프 본문을 종료합니다.
exit -- 현재 스크립트를 종료합니다.
3. 예
# vim test.sh -- 계속과 중단의 차이점 구분
#!/bin/bash
true
do
sleep 1
echo test
continue/break
echo
done
# vim test.sh --break와 break의 차이점을 구별하세요 종료
#!/bin/bash
테스트하는 동안 - e /data/test/test.sh
do
echo "exists"
sleep 1
break/exit
done
echo "loop end"
# vim test.sh --찾을 때까지 우리가 제공한 경로를 찾아보세요
# !/bin/bash
if test $# -ne 1;then
echo "잘못된 매개변수" >&2
exit
fi
path=$1
while test ! -e "$path"
do
sleep 1
echo "don'tfound!!!"
done
echo "found"
# vim test.sh --스크립트는 지정된 시간 동안 실행되고 해당 시간이 되면 종료됩니다. ; s
#!/bin/bash
if test $# -ne 1;then
echo "Usage: $(basename $0) TIME" >&2
exit 1
fi
timeLength에 대한 단위 =$1
beginTime=$(날짜 +%s)
endTime=$(( $beginTime + $timeLength ))
---------------------- -- ----------------------------------
테스트하는 동안 $(날짜 +%s) -lt " $endTime "
do
echo "처리 중...."
sleep 1
done
------------------------- - ----------------------------------
true일 때
do
if test $(date + %s) - ge "$endTime";then
break
fi
echo "처리 중...."
sleep 1
done
-------------------------------------- --------
echo "time out"
# vim test.sh --파일의 각 줄을 반복하면서 각 줄의 문자 수를 계산합니다
#!/bin/bash
file=$1
-------------------------------------------- ------ ---------------
totalLines=$(wc -l < $file)
line=1
while test $line -le $totalLines
do
lineData= $(sed -n "${line}p" $file)
len=$(echo -n $lineData | wc -c)
echo "라인 ${line}: $len "
line=$( ( $line + 1 ))
done
------------------------------- ---------- -----
line=1
읽는 동안 lineData
do
len=$(echo $lineData | wc -c)
echo "${line}: $len"
line=$(( $line + 1 ))
done < $file
------ --------- --------------- -
# vim test.sh -- 10줄의 hello world를 인쇄합니다. <(seq 10)은 프로세스 교체
#!/bin/bash
읽는 동안 파일 경로와 동일합니다
do
echo "hello world"
done <(seq 10)
------------- -------- ----------
n=1
동안 [ $n -le 10 ]
do
echo "hello world"
n=$((n+1))
done
------------------------- -------- ----------
# vim test.sh --무한 루프를 생성하여 1분 동안 실행한 후 루프가 자동으로 종료되도록 요구합니다
#!/bin/bash
start_time=$(date +%s)
true 동안
do
cur_time=$(date +%s)
test $((cur_time - start_time)) -ge 10 && break
time=$((cur_time - start_time))
echo "시간은 $time입니다. . ...."
sleep 1
done
# vim test.sh --먼저 while 루프를 사용하여 100개의 .txt 파일을 만든 다음 모든 파일의 접미사를 .html
#으로 변경하세요! /bin /bash
count=100
----------------------------------------- -- ---
seq $count | 읽는 동안 i
do
touch ${i}.txt
done
ls -1 *.txt | 읽는 동안 oldname
do
newname=$(echo $oldname | sed 's/.txt$/.html/')
mv $oldname $newname
done
--- -- ------------------------------------------------ -- -
읽는 동안 i
do
touch ${i}.txt
done < <( seq $count )
읽는 동안 oldname
do
newname=$(echo $ oldname | sed 's/.txt$/.html/')
mv $oldname $newname
done <(ls -1 *.txt )
# vim test.sh -계산 1000 파이프가 하위 프로세스를 생성하므로 파이프 내의 짝수 합계를 사용할 수 없습니다
#!/bin/bash
sum=0
읽는 동안 num
do
sum=$(( $sum + $num ))
done < <(seq 2 2 998)
echo "sum: $sum "
# vim test.sh --100개의 이메일을 일괄 추가 사용자, 사용자 이름은 u1 ~ u100, 비밀번호는 abc, 로그인 쉘은 /sbin/nologin, 이메일 그룹
#!/bin/bash
password=abc
group=email
grep -Eq에만 속합니다. " ^${group}:" /etc/group || groupadd $group
읽는 동안 i
do
useradd u${i} -N -g $group -s /sbin/nologin
passwd u$ { i} --stdin <<< "$password"
done <(seq 100)
# vim test.sh --방금 생성한 100명의 이메일 사용자를 일괄 삭제합니다
# ! /bin/bash
읽는 동안 i
do
userdel -r u${i}
done < 열린 문자열에서 한 번에 하나씩 순서대로 가져오면 루프가 종료됩니다.
매번 빼낸 문자열은 변수에 저장되어 루프 본문에서 사용할 수 있습니다.
구분자로 구분된 문자열은 다음 방법을 통해 제공할 수 있습니다.
1 루프용 문자열을 수동으로 입력합니다. 지정된 횟수
# vim test.sh
#!/bin/bash
for i in 1 2 3
do
echo $i
don
2. 변수
# vim test.sh
#!/bin/bash
FILES="/bin/bash /bin /ls /bin/cat"
for file in $FILES
do
echo $file
done
3. 프로그램 생성 문자열
# vim test.sh
#!/bin/bash
for n in $(seq 11)
do
echo $n
done
4 셸 확장으로 생성됨, 디렉터리의 파일 반복
# vim test.sh
#!/bin/bash
for f in /etc/init.d/*
do
echo $f
done
# vim test.sh
5 /dev
# vim test.sh
#!/bin/ bash
에서 루프로 시작하는 모든 파일의 파일 이름을 인쇄합니다.
for file in /dev/loop*
do
echo $(basename $file)
done
6 1000
# vim test.sh
#!/ bin/bash
sum=0
for number in $(seq 2 2 998)
do
 sum=$(( $sum + $number ))
done
echo "총계: $ sum"
7. 100명의 이메일 사용자를 일괄 추가합니다. 사용자 이름은 u1~u10이고, 비밀번호는 abc이며, 로그인 셸은 /sbin/nologin이며, 이메일 그룹에만 속합니다
# vim test.sh
#!/ bin/bash
function checkGid() {
gid=$1
if ! grep -qE "^$gid:" /etc/group; then
groupadd $gid
fi
}
함수 isRoot( ) {
id=$(id | awk -F "[=(]" '{print $2}')
if test "$id" -ne 0; then
echo "루트여야 함" >&2
exit 1
fi
}
count=10
namePrefix=u
password=abc
shell=/sbin/nologin
gid=email
isRoot
checkGid $gid
for $(의 숫자 seq $count)
do
name=${namePrefix}${num}
useradd $name -s $shell -g $gid &> /dev/null
if test $?
echo "$name을 생성하지 못했습니다." >&2
else
echo "성공적으로 생성되었습니다 -- $name"
echo "$password" | passwd --stdin $name &> /dev/null
if test $? -ne 0; then
echo "$name의 비밀번호를 변경하지 못했습니다." >&2
else
echo "비밀번호가 성공적으로 변경되었습니다. -- $name"
fi
fi
8 , LAN에 있는 모든 컴퓨터의 IP 및 MAC 주소에 해당하는 테이블을 가져옵니다
# vim test.sh
#!/bin/bash
ipPrefix=192.168.1.
startIp=1
endIp=254
for num in $(seq $startIp $endIp)
do
ip=${ipPrefix}$num
ping -W1 -c1 $ip &>/dev/null &
done
wait
arp -n | sed '/incomplete/d' | awk '{print $1,$3}' | 정렬 -n -k4,4 |
9 곱셈표를 인쇄하세요
# vim test.sh
#!/bin/bash
for row in $(seq 9)
do
for col in $(seq $row)
do
echo -n "${col}x${row}=$(( $col * $row )) "
done
echo
done | 열 -t
10.
#!/bin/bash
varnum=3
if test "$#" -ne "$varnum" then
echo "잘못된 인수" >&2
exit 1
fi
num1 =$1
num2=$3
operator=$2
if test "$operator" = "x";then
operator="*"
fi
if test "$operator" = "/" - a "$num2" = 0; then
echo "0으로 나누기" >& 2
exit 1
fi
result=$(( $num1 $operator $num2 ))
echo "$result"
참고: 곱셈 처리, 배당금이 0
11일 때 처리. 지정된 디렉터리에 특정 파일을 복사합니다. 요구 사항:
#1. 명령줄에서 두 개의 매개 변수를 받습니다. 원본 디렉터리와 대상 디렉터리가 각각
#2. 원본 디렉터리가 없으면 오류가 보고됩니다
#3. 대상 디렉터리가 없으면 새로 만듭니다
#4. 디렉토리는 아니고 에러 리포트
#5. 일반 파일과 소프트 링크 파일만 복사하세요
#6. 일반 파일은 1M 이하의 파일만 복사하세요
# vim /test.sh
# !/bin/bash
function displayHelp()
{
echo "사용법: $(basename $0) SRCDIR DSTDIR"
}
function getSize()
{
file=$1
size=$(ls -l $file | awk '{print $5}')
echo $size
}
if test $# -ne 2; then
displayHelp >&2
exit 1
fi
srcdir=$1
dstdir=$2
if 테스트! -d "$srcdir"; then
echo "$srcdir이 존재하지 않거나 디렉토리가 아닙니다." >&2
exit 1
fi
if test ! -e "$dstdir"; 그럼
mkdir "$dstdir"
fi
if 테스트 ! -d "$dstdir"; then
echo "$dstdir은 디렉토리가 아닙니다." >&2
exit 1
fi
for file in $srcdir/*
do
if test -L $file; then
cp -a $file $dstdir/
elif test -f $file; 그럼
---------------------------------- ----
size=$(getSize $file)
if test "$size" -lt 1048576; 그럼
cp -a $file $dstdir/
fi
----------------------------------- -----------------
find $file -type f -size -1024k -exec cp -a {} $dstdir/ ;
--------- ------------------------------
fi
완료

위 내용은 껍질이란 무엇입니까? 일반적인 유형의 쉘 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿