목차
1. 왜 쉘이라고 부르나요? " >1. 왜 쉘이라고 부르나요?
2. 쉘 프롬프트(PS1)와 캐리지 리턴(CR)은 어떤 관계가 있나요? " >2. 쉘 프롬프트(PS1)와 캐리지 리턴(CR)은 어떤 관계가 있나요?
3. 에코에 대해 얼마나 알고 계시나요? " >3. 에코에 대해 얼마나 알고 계시나요?
4. 큰따옴표 ""와 작은따옴표 ''의 차이점은 무엇입니까?" >4. 큰따옴표 ""와 작은따옴표 ''의 차이점은 무엇입니까?
5、var=value? export 前后差在哪?" >5、var=value? export 前后差在哪?
6、exec 跟 source 差在哪?" >6、exec 跟 source 差在哪?
7、( ) 与 { } 差在哪?" >7、( ) 与 { } 差在哪?
8、$(()) 与 $() 还有 ${} 差在哪?" >8、$(()) 与 $() 还有 ${} 差在哪?
9、$@ 与 $* 区别在哪?" >9、$@ 与 $* 区别在哪?
10. &&와 ||의 차이점은 무엇인가요? " >10. &&와 ||의 차이점은 무엇인가요?
11、> 与 < 差在哪?" >11、> 与 < 差在哪?
12、你要if还是case呢?" >12、你要if还是case呢?
13、for what? while与until差在哪?" >13、for what? while与until差在哪?
운영 및 유지보수 리눅스 운영 및 유지 관리 쉘 스크립트에 관한 13가지 기본 질문

쉘 스크립트에 관한 13가지 기본 질문

Aug 03, 2023 pm 03:03 PM
shell 쉘 스크립트


쉘 스크립트에 관한 13가지 기본 질문

1. 왜 쉘이라고 부르나요?

우리는 컴퓨터의 작동이 하드웨어와 분리될 수 없다는 것을 알고 있지만 하드웨어를 직접 작동시킬 수는 없습니다. 엄밀히 말하면 Linux는 "운영 체제(OS)"라는 소프트웨어에 의해서만 제어될 수 있습니다. 운영체제(OS)

사용자가 커널을 직접 조작할 수는 없지만, 소위 쉘이라고 불리는 커널의 "쉘" 프로그램을 통해 커널과 통신합니다. 시스템은 명령줄을 통해서만 작업을 완료하는 데 사용할 수 있습니다. 따라서 Shell의 가장 간단한 정의는 다음과 같습니다. 명령 해석기(Command Interpreter)

  • 처리를 위해 사용자 명령을 커널로 변환합니다. 동시에 커널 처리 결과가 사용자에게 전달됩니다.

  • 서로 다른 OS는 서로 다른 커널을 사용하며, 공통 쉘에는 sh, bash 및 csh 등이 포함됩니다.

    2. 쉘 프롬프트(PS1)와 캐리지 리턴(CR)은 어떤 관계가 있나요?

    셸 터미널에 성공적으로 로그인한 후 커서 왼쪽 부분을 프롬프트 프롬프트라고 하며, 이는 일반적으로 일반 사용자가 사용합니다. $,管理员用户使用#

    • 셸 프롬프트: 명령을 입력한 후 명령을 입력할 수 있습니다. , 명령이 입력될 때까지 CR(캐리지 리턴)을 읽습니다. 문자

    • 캐리지 리턴: 명령을 실행할 수 있습니다.

    기술적인 세부 사항을 보면 Shell이 ​​텍스트를 분해합니다. IFS(내부 필드 구분자) "(단어/필드)를 기반으로 "필드"에 명령줄에 입력됩니다. 그런 다음 특수 문자(메타)가 먼저 처리되고 마지막으로 전체 명령줄이 재구성됩니다.

    3. 에코에 대해 얼마나 알고 계시나요?

    echo는 일반적으로 화면에 표시되는 표준 출력(stdout)으로 인수를 보냅니다.

    stdin 표준 입력
    stdout 표준 출력
    stderr 표준 오류 출력

    echo -n  # 取消换行符
    echo -e  # 启用反斜杠转译
    로그인 후 복사

    4. 큰따옴표 ""와 작은따옴표 ''의 차이점은 무엇입니까?

    • 큰따옴표: ''(작은따옴표), 모든 참조 닫기&#39;&#39;(单引号),关闭所有引用

    • soft quote:""(双引号),保留$引用

    5、var=value? export 前后差在哪?

    • 变量定义:name=value,等号左右两边不能使用分隔符。

    • 变量替换:echo ${name}

    • 🎜소프트 인용문: ""(큰따옴표) , 예약됨 $Quote🎜
    🎜🎜5.var=value? 차이점은 무엇인가요? 🎜🎜🎜🎜🎜변수 정의: 이름=값</code > 등호의 왼쪽과 오른쪽에는 구분 기호를 사용할 수 없습니다. 🎜</li>🎜🎜변수 대체: <code mp-original-font-size="16" mp-original-line-height="25" style="margin-right: 2px;margin-left: 2px;padding : 2px 4px;개요: 0px;라인 높이: 25px;테두리 반경: 4px;색상: rgb(233, 105, 0);배경색: rgb(248, 248, 248);">에코 ${이름 }🎜
  • export变量:export name=value,使变量成为环境变量

# 本地变量
A=B
# 取消变量
unset A
# 环境变量export A=B
로그인 후 복사

6、exec 跟 source 差在哪?

环境变量只能从父进程到子进程单向传递。换句话说:在子进程中环境如何变更,均不会影响父进程的环境。
当我们执行一个shell script时,其实是先产生一个sub-shell的子进程, 然后sub-shell再去产生命令行的子进程。关注Linux中文社区

# 创建子shell执行脚本
./1.sh
# 当前shell执行
source 1.sh
# 当前shell执行后退出
exec 1.sh
로그인 후 복사

7、( ) 与 { } 差在哪?

( )将 command group 置于 sub-shell 执行
{ }则是在同一个shell内完成

8、$(()) 与 $() 还有 ${} 差在哪?

# 假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt
# 我们可以用 ${ } 分别替换获得不同的值:

# 1. shell字符串的非贪婪(最小匹配)左删除
${file#*/} # 拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
# 2. shell字符串的贪婪(最大匹配)左删除
${file##*/} # 拿掉最后一条 / 及其左边的字符串:my.file.txt
${file##*.} # 拿掉最后一个 . 及其左边的字符串:txt
# 3. shell字符串的非贪婪(最小匹配)右删除:
${file%/*} # 拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
${file%.*} # 拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
# 4. shell字符串的贪婪(最大匹配)右删除:
${file%%/*} # 拿掉第一条 / 及其右边的字符串:(空值)
${file%%.*} # 拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my

记忆的方法为:
# 是去掉左边(在键盘上 # 在 $ 之左边)
% 是去掉右边(在键盘上 % 在 $ 之右边)
单一符号是最小匹配﹔两个符号是最大匹配。
로그인 후 복사

# 5. shell字符串取子串:
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续 5 个字节:/dir2

# 6. shell字符串变量值的替换:
${file/dir/path}:将第一个 dir 提换为 path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部 dir 提换为 path:/path1/path2/path3/my.file.txt

# 7. ${}还可针对变量的不同状态(没设定、空值、非空值)进行赋值:
${file-my.file.txt} :假如 $file 没有设定,则使用 my.file.txt 作传回值。(空值及非空值时不作处理) 
${file:-my.file.txt} :假如 $file 没有设定或为空值,则使用 my.file.txt 作传回值。(非空值时不作处理)
${file+my.file.txt} :假如 $file 设为空值或非空值,均使用 my.file.txt 作传回值。(没设定时不作处理)
${file:+my.file.txt} :若 $file 为非空值,则使用 my.file.txt 作传回值。(没设定及空值时不作处理)
${file=my.file.txt} :若 $file 没设定,则使用 my.file.txt 作传回值,同时将 $file 赋值为 my.file.txt 。(空值及非空值时不作处理)
${file:=my.file.txt} :若 $file 没设定或为空值,则使用 my.file.txt 作传回值,同时将 $file 赋值为 my.file.txt 。(非空值时不作处理)
${file?my.file.txt} :若 $file 没设定,则将 my.file.txt 输出至 STDERR。(空值及非空值时不作处理)
${file:?my.file.txt} :若 $file 没设定或为空值,则将 my.file.txt 输出至 STDERR。(非空值时不作处理)

tips:
以上的理解在于, 你一定要分清楚 unset 与 null 及 non-null 这三种赋值状态.
一般而言, : 与 null 有关, 若不带 : 的话, null 不受影响, 若带 : 则连 null 也受影响.
로그인 후 복사

# 8. 计算shell字符串变量的长度:${#var}
${#var} 可计算出变量值的长度:
${#file} 可得到 27 ,因为 /dir1/dir2/dir3/my.file.txt 刚好是 27 个字节...

# 9. bash数组(array)的处理方法
数组:
A=(a b c d)
引用数组:
${A[@]}
${A[*]}
访问数组成员
${A[0]}
计算数组长度
${#A[@]}
${#A[*]}
数组重新赋值
A[2]=xyz

# 10.$(( ))是用来做整数运算的 
a=5;b=7;c=2;
echo $(( a + b * c))
로그인 후 복사

9、$@ 与 $* 区别在哪?

  • "$@"则可得到 “p1” “p2 p3” “p4” 这三个不同的词段

  • "$*""p1 p2 p3 p4"와 같은 단일 문구 전체 ​​문자열을 얻을 수 있습니다

  • 또한 공개 계정 Linux를 검색하여 백그라운드에서 "git books"라고 답하는 방법을 배우고 깜짝 선물 패키지를 받으세요. .

10. &&와 ||의 차이점은 무엇인가요?

1 테스트 명령에는 두 가지 형식이 있습니다

  • test 표현식

  • [ 표현식 ]

2.

문자열: 문자열
  • 정수: 정수
  • 파일: 파일

3、当 expression 为真是返回 0(true) ,否则返回 非0(false)

  • command1 && command2 command2 只有在 command1 的RV为0(True)的条件下执行。

  • command1 || command2 command2只有在command1的RV为非0(False)的条件下执行。

4、先替换变量再比较

A=123[ -n "$A" ] && ([ "$A" -lt 100 ] || echo "too big")unset A
로그인 후 복사

11、> 与 < 差在哪?

0: Standard Input(STDIN)
1: Standard Output (STDOUT)
2: Standard Error Output(STDERR)

我们可用 < 来改变读进的数据信道(stdin),使之从指定的档案读进。

我们可用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案。

ls my.file no.such.file 1> file.out 2>file.err
# 2>&1 就是将stderr并进stdout做输出
ls my.file no.such.file 1> file.out 2>&1
# /dev/null 空
ls my.file no.such.file >/dev/null 2>&1

cat < file > file
# 在 IO Redirection 中,stdout 与 stderr 的管道会先准备好,才会从 stdin 读进资料。
# 也就是说,在上例中,> file 会先将 file 清空,然后才读进 < file , 
# 但这时候档案已经被清空了,因此就变成读不进任何数据了
로그인 후 복사

12、你要if还是case呢?

# if
echo -n "Do you want to continue?(Yes/No):"
read YN
if [ "$YN"=Y -o "$YN"=y -o "$YN"="Yes" -o "$YN"="yes" -o "$YN"="YES"];then
echo "continue"
else
exit 0
fi

# case
echo -n "Do you want to continue?(Yes/No):"
read YN
case "$YN" in
[Yy]|[Yy][Ee][Ss])
echo "continue"
;;
*)
exit 0
esac
로그인 후 복사

13、for what? while与until差在哪?

# for
for ((i=1;i<=10;i++))
do
echo "num is $i"
done

# while
num=1
while [ "$num" -le 10 ]; do
echo "num is $num"
num=$(($num + 1))
done

# until
num=1
until [ "$num" -gt 10 ]; do
echo "num is $num"
num=$(($nu + 1))
done
로그인 후 복사
  • break 是结束 loop

  • return 是结束 function

  • exit 是结束 script/shell

위 내용은 쉘 스크립트에 관한 13가지 기본 질문의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

ESD 파일을 ISO 형식으로 변환하는 방법 ESD 파일을 ISO 형식으로 변환하는 방법 Feb 19, 2024 am 08:37 AM

esd 파일은 Windows 운영 체제에서 사용되는 압축 형식이고, ISO 파일은 디스크 복사본이나 가상 광학 드라이브를 만드는 데 사용되는 디스크 이미지 파일입니다. esd 파일을 iso 파일로 변환해야 하는 경우 ISO 파일이 더 일반적으로 사용되고 사용하기 쉽기 때문일 수 있습니다. 다음은 이 변환 프로세스를 완료하는 몇 가지 일반적인 방법을 소개합니다. 방법 1: ESDDecrypter 사용 ESDDecrypter는 esd 파일을 해독하고 iso 파일로 변환하는 데 특별히 사용되는 프로그램입니다.

Linux 시스템에서 .sh 파일을 실행하는 방법은 무엇입니까? Linux 시스템에서 .sh 파일을 실행하는 방법은 무엇입니까? Mar 14, 2024 pm 06:42 PM

Linux 시스템에서 .sh 파일을 실행하는 방법은 무엇입니까? Linux 시스템에서 .sh 파일은 일련의 명령을 실행하는 데 사용되는 셸 스크립트라는 파일입니다. .sh 파일 실행은 매우 일반적인 작업입니다. 이 기사에서는 Linux 시스템에서 .sh 파일을 실행하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 방법 1: 절대 경로를 사용하여 .sh 파일을 실행합니다. Linux 시스템에서 .sh 파일을 실행하려면 절대 경로를 사용하여 파일 위치를 지정할 수 있습니다. 구체적인 단계는 다음과 같습니다. 터미널을 엽니다.

Linux에서 파일 끝의 줄을 빠르게 삭제하는 방법 Linux에서 파일 끝의 줄을 빠르게 삭제하는 방법 Mar 01, 2024 pm 09:36 PM

Linux 시스템에서 파일을 처리할 때 파일 끝 부분의 줄을 삭제해야 하는 경우가 있습니다. 이 작업은 실제 응용 프로그램에서 매우 일반적이며 몇 가지 간단한 명령을 통해 수행할 수 있습니다. 이 기사에서는 Linux 시스템에서 파일 끝의 줄을 빠르게 삭제하는 단계를 소개하고 구체적인 코드 예제를 제공합니다. 1단계: 파일의 마지막 줄을 확인하세요. 삭제 작업을 수행하기 전에 먼저 파일의 마지막 줄이 무엇인지 확인해야 합니다. tail 명령을 사용하여 파일의 마지막 줄을 볼 수 있습니다. 특정 명령은 다음과 같습니다. tail-n1filena

Linux 루트 파일 시스템의 비밀 Linux 루트 파일 시스템의 비밀 Feb 15, 2024 pm 01:42 PM

Linux는 서버, 데스크탑, 임베디드 장치 등 다양한 분야에서 널리 사용되는 오픈 소스, 이식성 및 사용자 정의 가능한 운영 체제입니다. 리눅스의 핵심은 하드웨어 자원을 관리하고 기본적인 서비스를 제공하는 커널이다. 그러나 커널은 독립적인 개체가 아니며 다양한 데이터와 프로그램을 저장하고 액세스하려면 파일 시스템이 필요합니다. 파일 시스템은 파일의 이름, 위치, 속성, 권한 및 기타 정보를 정의하고 구성하는 방법입니다. Linux에는 ext4, xfs, btrfs 등과 같은 다양한 유형의 파일 시스템이 있으며 각각 고유한 특성과 장점을 가지고 있습니다. 그러나 모든 파일 시스템 중에는 리눅스 시스템의 근간이자 핵심이 되는 특별한 파일 시스템이 있는데,

Windows 7에서 bat 파일을 실행할 수 없는 이유는 무엇입니까? Windows 7에서 bat 파일을 실행할 수 없는 이유는 무엇입니까? Feb 19, 2024 pm 03:19 PM

win7에서 bat 파일을 실행할 수 없는 이유는 무엇입니까? 최근 Windows7 운영 체제를 사용하는 많은 사용자가 .bat 파일을 실행할 수 없다고 보고했습니다. 이는 광범위한 논의와 혼란을 불러일으켰습니다. 잘 작동하는 운영 체제에서 간단한 .bat 파일을 실행할 수 없는 이유는 무엇입니까? 먼저 .bat 파일의 배경을 이해해야 합니다. 배치 파일이라고도 하는 .bat 파일은 Windows 명령 해석기(cmd.ex)에서 사용할 수 있는 일련의 명령이 포함된 일반 텍스트 파일입니다.

초보자를 위한 Windows PowerShell 스크립팅 자습서 초보자를 위한 Windows PowerShell 스크립팅 자습서 Mar 13, 2024 pm 10:55 PM

우리는 기술 애호가이든 스크립팅 기술을 향상시키려는 전문가이든 초보자를 위해 이 Windows PowerShell 스크립팅 자습서를 디자인했습니다. PowerShell 스크립팅에 대한 사전 지식이 없는 경우 이 문서는 기본 사항부터 시작하여 귀하에게 맞게 조정됩니다. PowerShell 환경의 설치 단계를 익히는 데 도움을 주고 PowerShell 스크립트의 주요 개념과 기능을 안내해 드립니다. PowerShell 스크립팅에 대해 더 자세히 알아볼 준비가 되었다면 이 흥미로운 학습 여정을 함께 시작해 보세요! WindowsPowerShell이란 무엇입니까? PowerShell은 Microsoft에서 개발한 하이브리드 명령 시스템입니다.

PowerShell을 사용하여 작업을 자동화하는 방법 PowerShell을 사용하여 작업을 자동화하는 방법 Feb 20, 2024 pm 01:51 PM

IT 관리자이거나 기술 전문가라면 자동화의 중요성을 인식해야 합니다. 특히 Windows 사용자의 경우 Microsoft PowerShell은 최고의 자동화 도구 중 하나입니다. Microsoft는 타사 응용 프로그램을 설치할 필요 없이 자동화 요구 사항에 맞는 다양한 도구를 제공합니다. 이 가이드에서는 PowerShell을 활용하여 작업을 자동화하는 방법을 자세히 설명합니다. PowerShell 스크립트란 무엇입니까? PowerShell을 사용한 경험이 있다면 명령을 사용하여 운영 체제를 구성했을 수 있습니다. 스크립트는 .ps1 파일에 있는 이러한 명령의 모음입니다. .ps1 파일에는 기본 Get-Help와 같이 PowerShell에서 실행되는 스크립트가 포함되어 있습니다.

URL 파일을 여는 방법 URL 파일을 여는 방법 Mar 28, 2024 pm 06:27 PM

URL 파일을 사용하여 인터넷 리소스를 여는 방법에는 두 번 클릭하여 웹 브라우저를 사용하여 여는 방법이 있습니다. 텍스트 편집기로 열고 링크 주소를 복사하여 브라우저 주소 표시줄에 붙여넣습니다. 명령줄을 통해 "start" 또는 "open" 명령을 사용하여 URL 파일 경로를 지정합니다. URL 파일을 여는 명령이 포함된 스크립트 파일을 만듭니다.

See all articles