쉘 용량


변수를 정의할 때 다음과 같이 변수 이름에 달러 기호($, PHP 언어의 변수에 필요함)를 추가하지 마세요.

your_name="php.cn"

변수 이름과 등호 사이에 공백이 있어서는 안 됩니다. 이는 여러분이 익숙한 모든 프로그래밍 언어와 다를 수 있습니다. 동시에 변수 이름의 명명은 다음 규칙을 따라야 합니다.

  • 첫 번째 문자는 문자(a-z, A-Z)여야 합니다.

  • 중간에 공백이 있어서는 안 되며, 밑줄(_)을 사용할 수 있습니다.

  • 구두점은 사용할 수 없습니다.

  • Bash의 키워드는 사용할 수 없습니다(help 명령을 사용하여 예약된 키워드를 볼 수 있습니다).

명시적인 직접 할당 외에도 명령문을 사용하여 다음과 같이 변수에 값을 할당할 수도 있습니다.

for file in `ls /etc`

위 명령문은 /etc 아래 디렉터리의 파일 이름을 반복합니다.


변수 사용

정의된 변수를 사용하려면 다음과 같이 변수 이름 앞에 달러 기호를 추가하면 됩니다.

your_name="qinjx"
echo $your_name
echo ${your_name}

변수 이름 밖의 중괄호는 선택 사항입니다. 추가할 수도 있고 안 할 수도 있습니다.

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

스킬 변수에 중괄호를 추가하지 않고 echo "I am good at $skillScript"라고 쓰면 인터프리터가 $skillScript를 처리하게 됩니다. SkillScript를 변수로 사용하면(값이 비어 있음) 코드 실행 결과가 예상한 것과 다릅니다.

모든 변수에 중괄호를 추가하는 것이 좋습니다. 이는 좋은 프로그래밍 습관입니다.

정의된 변수는 다음과 같이 재정의될 수 있습니다.

your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

이렇게 작성하는 것은 합법적이지만 두 번째로 값을 할당할 때는 $your_name="alibaba"라고 쓸 수 없습니다. 사용할 때는 달러 기호만 추가하세요. 변수($).

읽기 전용 변수

변수를 읽기 전용 변수로 정의하려면 readonly 명령을 사용하세요. 읽기 전용 변수의 값은 변경할 수 없습니다.

다음 예에서는 읽기 전용 변수를 변경하려고 시도하며 결과는 오류입니다.

#!/bin/bash
myUrl="http://www.w3cschool.cc"
readonly myUrl
myUrl="http://www.php.cn"

스크립트를 실행하면 결과는 다음과 같습니다.

/bin/sh: NAME: This variable is read only.

변수 삭제

unset 명령을 사용하여 변수를 삭제합니다. 구문:

unset variable_name

변수는 삭제된 후에는 다시 사용할 수 없습니다. unset 명령은 읽기 전용 변수를 삭제할 수 없습니다.

Example

#!/bin/sh
myUrl="http://www.php.cn"
unset myUrl
echo $myUrl

위 예제를 실행하면 출력이 되지 않습니다.

변수 유형

셸을 실행할 때 세 가지 변수가 동시에 존재합니다.

  • 1) 로컬 변수로컬 변수는 스크립트나 명령에 정의되며 현재 시작된 셸 인스턴스에서만 유효합니다. 다른 쉘에서는 지역 변수에 액세스할 수 없습니다.

  • 2) 환경 변수쉘에 의해 시작된 프로그램을 포함한 모든 프로그램은 환경 변수에 접근할 수 있습니다. 일부 프로그램은 정상적인 작동을 위해 환경 변수가 필요합니다. 쉘 스크립트는 필요할 때 환경 변수를 정의할 수도 있습니다.

  • 3) 쉘 변수쉘 변수는 쉘 프로그램에 의해 설정되는 특수 변수입니다. 쉘 변수 중 일부는 환경 변수이고 일부는 로컬 변수입니다. 이러한 변수는 쉘의 정상적인 작동을 보장합니다


Shell String

String은 쉘 프로그래밍에서 가장 일반적으로 사용되는 유용한 데이터 유형입니다(숫자 및 문자열을 제외하고 사용하기 쉬운 다른 유형은 없습니다). , 또는 따옴표가 없습니다. 작은따옴표와 큰따옴표의 차이점은 PHP와 유사합니다.

작은따옴표

str='this is a string'

작은따옴표 문자열 제한 사항:

  • 작은따옴표 안의 모든 문자는 그대로 출력되며, 작은따옴표 문자열의 변수는 유효하지 않습니다. 작은따옴표는 작은따옴표로 묶인 문자열에 나타날 수 없습니다(작은따옴표에 이스케이프 문자를 사용한 후에도 마찬가지).

  • 큰따옴표

    your_name='qinjx'
    str="Hello, I know your are \"$your_name\"! \n"
  • 큰따옴표의 장점:

큰따옴표 안에 변수를 넣을 수 있습니다

  • 이스케이프 문자는 큰따옴표로 표시될 수 있습니다

  • 문자열 연결

    your_name="qinjx"
    greeting="hello, "$your_name" !"
    greeting_1="hello, ${your_name} !"
    echo $greeting $greeting_1
  • 문자열 길이 가져오기
string="abcd"
echo ${#string} #输出 4

하위 문자열 추출

다음 예에서는 문자열의

2

문자에서 시작하는

4

문자를 가로챕니다.

string="php is a great site"
echo ${string:1:4} # 输出 unoo
Find substring문자 "

i

또는

s

" 위치 찾기:

string="php is a great company"
echo `expr index "$string" is`  # 输出 8
참고: 위 스크립트의 "`"는 작은따옴표 "'"가 아니라 백틱입니다. 읽지 마세요. 틀렸어.

Shell Array

bash는 1차원 배열을 지원하며(다차원 배열은 지원하지 않음) 배열 크기를 제한하지 않습니다.

C 언어와 유사하게 배열 요소의 첨자는 0부터 시작하여 번호가 매겨집니다. 배열의 요소를 얻으려면 아래 첨자를 사용하십시오. 아래 첨자는 정수 또는 산술 표현식일 수 있으며 해당 값은 0보다 크거나 같아야 합니다.

배열 정의

Shell에서 대괄호는 배열을 나타내는 데 사용되며 배열 요소는 "공백" 기호로 구분됩니다. 배열 정의의 일반적인 형식은 다음과 같습니다.

数组名=(值1 值2 ... 值n)

예:

array_name=(value0 value1 value2 value3)

또는

array_name=(
value0
value1
value2
value3
)

배열의 각 구성 요소를 개별적으로 정의할 수도 있습니다.

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

는 연속 첨자를 사용할 필요가 없으며 첨자의 범위는 다음과 같습니다. 제한되지 않습니다.

배열 읽기

배열 요소 값을 읽는 일반적인 형식은 다음과 같습니다.

${数组名[下标]}

예:

valuen=${array_name[n]}

@ 기호를 사용하여 배열의 모든 요소를 ​​가져옵니다. 예:

echo ${array_name[@]}

길이 가져오기 the array

배열 길이 가져오기 방법은 문자열 길이를 가져오는 방법과 동일합니다. 예:

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

Shell Comments

"#"으로 시작하는 줄은 주석이며 해석기에서 무시됩니다. .

sh에는 여러 줄 주석이 없으며 각 줄에 # 기호만 추가할 수 있습니다.

#--------------------------------------------
# 这是一个注释
# author:php中文网
# site:www.php.cn
# slogan: php中文网
#--------------------------------------------
##### 用户配置区 开始 #####
#
#
# 这里可以添加脚本描述信息
# 
#
##### 用户配置区 结束  #####

개발 과정에서 일시적으로 주석을 달고 잠시 후 주석을 제거해야 하는 큰 코드 섹션을 발견하면 어떻게 해야 합니까?

각 줄에 # 기호를 추가하는 것은 너무 번거롭습니다. 주석 처리할 코드를 중괄호로 묶어 함수로 정의하면 됩니다. 이를 통해 주석은 동일한 효과를 갖습니다.