- [Shell ç¼ç¨å
¥é¨](#shell-ç¼ç¨å
¥é¨)
- [èµ°è¿ Shell ç¼ç¨ç大é¨](#èµ°è¿-shell-ç¼ç¨ç大é¨)
- [为ä»ä¹è¦å¦Shellï¼](#为ä»ä¹è¦å¦shell)
- [ä»ä¹æ¯ Shellï¼](#ä»ä¹æ¯-shell)
- [Shell ç¼ç¨ç Hello World](#shell-ç¼ç¨ç-hello-world)
- [Shell åé](#shell-åé)
- [Shell ç¼ç¨ä¸çåéä»ç»](#shell-ç¼ç¨ä¸çåéä»ç»)
- [Shell å符串å
¥é¨](#shell-å符串å
¥é¨)
- [Shell åç¬¦ä¸²å¸¸è§æä½](#shell-åç¬¦ä¸²å¸¸è§æä½)
- [Shell æ°ç»](#shell-æ°ç»)
- [Shell åºæ¬è¿ç®ç¬¦](#shell-åºæ¬è¿ç®ç¬¦)
- [ç®æ°è¿ç®ç¬¦](#ç®æ°è¿ç®ç¬¦)
- [å
³ç³»è¿ç®ç¬¦](#å
³ç³»è¿ç®ç¬¦)
- [é»è¾è¿ç®ç¬¦](#é»è¾è¿ç®ç¬¦)
- [å¸å°è¿ç®ç¬¦](#å¸å°è¿ç®ç¬¦)
- [å符串è¿ç®ç¬¦](#å符串è¿ç®ç¬¦)
- [æä»¶ç¸å
³è¿ç®ç¬¦](#æä»¶ç¸å
³è¿ç®ç¬¦)
- [shellæµç¨æ§å¶](#shellæµç¨æ§å¶)
- [if æ¡ä»¶è¯å¥](#if-æ¡ä»¶è¯å¥)
- [for 循ç¯è¯å¥](#for-循ç¯è¯å¥)
- [while è¯å¥](#while-è¯å¥)
- [shell 彿°](#shell-彿°)
- [ä¸å¸¦åæ°æ²¡æè¿åå¼ç彿°](#ä¸å¸¦åæ°æ²¡æè¿åå¼ç彿°)
- [æè¿åå¼ç彿°](#æè¿åå¼ç彿°)
- [另忰ç彿°](#另忰ç彿°)
# Shell ç¼ç¨å
¥é¨
## èµ°è¿ Shell ç¼ç¨ç大é¨
### 为ä»ä¹è¦å¦Shellï¼
å¦ä¸ä¸ªä¸è¥¿ï¼æä»¬å¤§é¨åæ
åµé½æ¯å¾å®ç¨æ§æ¹åçæ³ãä»å·¥ä½è§åº¦æ¥è®²ï¼å¦ä¹ Shell æ¯ä¸ºäºæé«æä»¬èªå·±å·¥ä½æçï¼æé«äº§åºï¼è®©æä»¬å¨æ´å°çæ¶é´å®ææ´å¤çäºæ
ã
å¾å¤äººä¼è¯´ Shell ç¼ç¨å±äºè¿ç»´æ¹é¢çç¥è¯äºï¼åºè¯¥æ¯è¿ç»´äººåæ¥åï¼æä»¬åå端å¼åçæ²¡å¿
è¦å¦ãæè§å¾è¿ç§è¯´æ³å¤§éç¹éï¼ç¸æ¯äºä¸é¨åLinuxè¿ç»´çäººåæ¥è¯´ï¼æä»¬å¯¹ Shell ç¼ç¨ææ¡ç¨åº¦çè¦æ±è¦æ¯ä»ä»¬ä½ï¼ä½æ¯shellç¼ç¨ä¹æ¯æä»¬å¿
é¡»è¦ææ¡çï¼
ç®åLinuxç³»ç»ä¸ææµè¡çè¿ç»´èªå¨åè¯è¨å°±æ¯ShellåPythonäºã
两è
ä¹é´ï¼Shellå 乿¯ITä¼ä¸å¿
须使ç¨çè¿ç»´èªå¨åç¼ç¨è¯è¨ï¼ç¹å«æ¯å¨è¿ç»´å·¥ä½ä¸çæå¡çæ§ãä¸å¡å¿«éé¨ç½²ãæå¡å¯å¨åæ¢ãæ°æ®å¤ä»½åå¤çãæ¥å¿åæçç¯èéï¼shellæ¯ä¸å¯ç¼ºçãPython æ´éåå¤ç夿çä¸å¡é»è¾ï¼ä»¥åå¼å夿çè¿ç»´è½¯ä»¶å·¥å
·ï¼å®ç°éè¿web访é®çãShellæ¯ä¸ä¸ªå½ä»¤è§£éå¨ï¼è§£éæ§è¡ç¨æ·æè¾å
¥çå½ä»¤åç¨åºãä¸è¾å
¥å½ä»¤ï¼å°±ç«å³ååºç交äºçå¯¹è¯æ¹å¼ã
å¦å¤ï¼äºè§£ shell ç¼ç¨ä¹æ¯å¤§é¨åäºèç½å
¬å¸æèå端å¼å人åçè¦æ±ãä¸å¾æ¯ææªåçä¸äºç¥åäºèç½å
¬å¸å¯¹äº Shell ç¼ç¨çè¦æ±ã

### ä»ä¹æ¯ Shellï¼
ç®åæ¥è¯´âShellç¼ç¨å°±æ¯å¯¹ä¸å Linuxå½ä»¤çé»è¾åå¤çâã
W3Cschool ä¸çä¸ç¯æç« æ¯è¿æ ·ä»ç» Shellçï¼å¦ä¸å¾æç¤ºã

### Shell ç¼ç¨ç Hello World
å¦ä¹ ä»»ä½ä¸é¨ç¼ç¨è¯è¨ç¬¬ä¸ä»¶äºå°±æ¯è¾åºHelloWordäºï¼ä¸é¢æä¼ä»æ°å»ºæä»¶å°shell代ç ç¼åæ¥è¯´ä¸Shell ç¼ç¨å¦ä½è¾åºHello Worldã
(1)æ°å»ºä¸ä¸ªæä»¶ helloworld.sh :`touch helloworld.sh`ï¼æ©å±å为 shï¼sh代表Shellï¼ï¼æ©å±åå¹¶ä¸å½±åèæ¬æ§è¡ï¼è§åç¥æå°±å¥½ï¼å¦æä½ ç¨ php å shell èæ¬ï¼æ©å±åå°±ç¨ php 好äºï¼
(2) ä½¿èæ¬å
·ææ§è¡æéï¼`chmod +x helloworld.sh`
(3) ä½¿ç¨ vim å½ä»¤ä¿®æ¹helloworld.shæä»¶ï¼`vim helloworld.sh`(vim æä»¶------>è¿å
¥æä»¶----->å½ä»¤æ¨¡å¼------>æiè¿å
¥ç¼è¾æ¨¡å¼----->ç¼è¾æä»¶ ------->æEscè¿å
¥åºè¡æ¨¡å¼----->è¾å
¥:wq/q! ï¼è¾å
¥wq代表åå
¥å
容并éåºï¼å³ä¿åï¼è¾å
¥q!代表强å¶éåºä¸ä¿åãï¼)
helloworld.sh å
容å¦ä¸ï¼
```shell
#!/bin/bash
#第ä¸ä¸ªshellå°ç¨åº,echo æ¯linuxä¸çè¾åºå½ä»¤ã
echo "helloworld!"
```
shellä¸ # 符å·è¡¨ç¤ºæ³¨éã**shell ç第ä¸è¡æ¯è¾ç¹æ®ï¼ä¸è¬é½ä¼ä»¥#!å¼å§æ¥æå®ä½¿ç¨ç shell ç±»åãå¨linuxä¸ï¼é¤äºbash shell以å¤ï¼è¿æå¾å¤çæ¬çshellï¼ ä¾å¦zshãdashçç...ä¸è¿bash shellè¿æ¯æä»¬ä½¿ç¨æå¤çã**
(4) è¿è¡èæ¬:`./helloworld.sh` ãï¼æ³¨æï¼ä¸å®è¦åæ `./helloworld.sh` ï¼è䏿¯ `helloworld.sh` ï¼è¿è¡å
¶å®äºè¿å¶çç¨åºä¹ä¸æ ·ï¼ç´æ¥å `helloworld.sh` ï¼linux ç³»ç»ä¼å» PATH éå¯»æ¾ææ²¡æå« test.sh çï¼èåªæ /bin, /sbin, /usr/binï¼/usr/sbin çå¨ PATH éï¼ä½ çå½åç®å½é常ä¸å¨ PATH éï¼æä»¥åæ `helloworld.sh` æ¯ä¼æ¾ä¸å°å½ä»¤çï¼è¦ç¨`./helloworld.sh` åè¯ç³»ç»è¯´ï¼å°±å¨å½åç®å½æ¾ãï¼

## Shell åé
### Shell ç¼ç¨ä¸çåéä»ç»
**Shellç¼ç¨ä¸ä¸è¬å为ä¸ç§åéï¼**
1. **æä»¬èªå·±å®ä¹çåéï¼èªå®ä¹åéï¼:** ä»
å¨å½å Shell å®ä¾ä¸ææï¼å
¶ä» Shell å¯å¨çç¨åºä¸è½è®¿é®å±é¨åéã
2. **Linuxå·²å®ä¹çç¯å¢åé**ï¼ç¯å¢åéï¼ ä¾å¦ï¼$PATH, $HOME ç..., è¿ç±»åéæä»¬å¯ä»¥ç´æ¥ä½¿ç¨ï¼ï¼ä½¿ç¨ `env` å½ä»¤å¯ä»¥æ¥çææçç¯å¢åéï¼èsetå½ä»¤æ¢å¯ä»¥æ¥çç¯å¢åéä¹å¯ä»¥æ¥çèªå®ä¹åéã
3. **Shellåé** ï¼Shellåéæ¯ç± Shell ç¨åºè®¾ç½®çç¹æ®åéãShell åé䏿ä¸é¨åæ¯ç¯å¢åéï¼æä¸é¨åæ¯å±é¨åéï¼è¿äºåéä¿è¯äº Shell çæ£å¸¸è¿è¡
**常ç¨çç¯å¢åé:**
> PATH å³å®äºshellå°å°åªäºç®å½ä¸å¯»æ¾å½ä»¤æç¨åº
HOME å½åç¨æ·ä¸»ç®å½
HISTSIZEãåå²è®°å½æ°
LOGNAME å½åç¨æ·çç»å½å
HOSTNAMEãæä¸»æºçåç§°
SHELL å½åç¨æ·Shellç±»å
LANGUGE ãè¯è¨ç¸å
³çç¯å¢åéï¼å¤è¯è¨å¯ä»¥ä¿®æ¹æ¤ç¯å¢åé
MAILãå½åç¨æ·çé®ä»¶åæ¾ç®å½
PS1ãåºæ¬æç¤ºç¬¦ï¼å¯¹äºrootç¨æ·æ¯#ï¼å¯¹äºæ®éç¨æ·æ¯$
**ä½¿ç¨ Linux å·²å®ä¹çç¯å¢åéï¼**
æ¯å¦æä»¬è¦çå½åç¨æ·ç®å½å¯ä»¥ä½¿ç¨ï¼`echo $HOME`å½ä»¤ï¼å¦ææä»¬è¦çå½åç¨æ·Shellç±»å å¯ä»¥ä½¿ç¨`echo $SHELL`å½ä»¤ãå¯ä»¥çåºï¼ä½¿ç¨æ¹æ³é常ç®åã
**使ç¨èªå·±å®ä¹çåéï¼**
```shell
#!/bin/bash
#èªå®ä¹åéhello
hello="hello world"
echo $hello
echo "helloworld!"
```

**Shell ç¼ç¨ä¸çåéåçå½åçæ³¨æäºé¡¹ï¼**
- å½ååªè½ä½¿ç¨è±æåæ¯ï¼æ°ååä¸å线ï¼é¦ä¸ªå符ä¸è½ä»¥æ°åå¼å¤´ï¼ä½æ¯å¯ä»¥ä½¿ç¨ä¸å线ï¼_ï¼å¼å¤´ã
- ä¸é´ä¸è½æç©ºæ ¼ï¼å¯ä»¥ä½¿ç¨ä¸å线ï¼_ï¼ã
- ä¸è½ä½¿ç¨æ ç¹ç¬¦å·ã
- ä¸è½ä½¿ç¨bashéçå
³é®åï¼å¯ç¨helpå½ä»¤æ¥çä¿çå
³é®åï¼ã
### Shell å符串å
¥é¨
å符串æ¯shellç¼ç¨ä¸æå¸¸ç¨ææç¨çæ°æ®ç±»åï¼é¤äºæ°ååå符串ï¼ä¹æ²¡å¥å
¶å®ç±»å好ç¨äºï¼ï¼å符串å¯ä»¥ç¨åå¼å·ï¼ä¹å¯ä»¥ç¨åå¼å·ãè¿ç¹åJava䏿æä¸åã
**åå¼å·å符串ï¼**
```shell
#!/bin/bash
name='SnailClimb'
hello='Hello, I am '$name'!'
echo $hello
```
è¾åºå
容ï¼
```
Hello, I am SnailClimb!
```
**åå¼å·å符串ï¼**
```shell
#!/bin/bash
name='SnailClimb'
hello="Hello, I am "$name"!"
echo $hello
```
è¾åºå
容ï¼
```
Hello, I am SnailClimb!
```
### Shell åç¬¦ä¸²å¸¸è§æä½
**æ¼æ¥å符串ï¼**
```shell
#!/bin/bash
name="SnailClimb"
# 使ç¨åå¼å·æ¼æ¥
greeting="hello, "$name" !"
greeting_1="hello, ${name} !"
echo $greeting $greeting_1
# 使ç¨åå¼å·æ¼æ¥
greeting_2='hello, '$name' !'
greeting_3='hello, ${name} !'
echo $greeting_2 $greeting_3
```
è¾åºç»æï¼

**è·åå符串é¿åº¦ï¼**
```shell
#!/bin/bash
#è·åå符串é¿åº¦
name="SnailClimb"
# 第ä¸ç§æ¹å¼
echo ${#name} #è¾åº 10
# 第äºç§æ¹å¼
expr length "$name";
```
è¾åºç»æ:
```
10
10
```
ä½¿ç¨ expr å½ä»¤æ¶ï¼è¡¨è¾¾å¼ä¸çè¿ç®ç¬¦å·¦å³å¿
é¡»å
å«ç©ºæ ¼ï¼å¦æä¸å
å«ç©ºæ ¼ï¼å°ä¼è¾åºè¡¨è¾¾å¼æ¬èº«:
```shell
expr 5+6 // ç´æ¥è¾åº 5+6
expr 5 + 6 // è¾åº 11
```
å¯¹äºæäºè¿ç®ç¬¦ï¼è¿éè¦æä»¬ä½¿ç¨ç¬¦å·`\`è¿è¡è½¬ä¹ï¼å¦åå°±ä¼æç¤ºè¯æ³é误ã
```shell
expr 5 * 6 // è¾åºé误
expr 5 \* 6 // è¾åº30
```
**æªååå符串:**
ç®åçå符串æªåï¼
```shell
#ä»å符串第 1 个å符å¼å§å¾åæªå 10 个å符
str="SnailClimb is a great man"
echo ${str:0:10} #è¾åº:SnailClimb
```
æ ¹æ®è¡¨è¾¾å¼æªåï¼
```shell
#!bin/bash
#author:amau
var="http://www.runoob.com/linux/linux-shell-variable.html"
s1=${var%%t*}#h
s2=${var%t*}#http://www.runoob.com/linux/linux-shell-variable.h
s3=${var%%.*}#http://www
s4=${var#*/}#/www.runoob.com/linux/linux-shell-variable.html
s5=${var##*/}#linux-shell-variable.html
```
### Shell æ°ç»
bashæ¯æä¸ç»´æ°ç»ï¼ä¸æ¯æå¤ç»´æ°ç»ï¼ï¼å¹¶ä¸æ²¡æé宿°ç»ç大å°ãæä¸é¢ç»äºå¤§å®¶ä¸ä¸ªå
³äºæ°ç»æä½ç Shell 代ç 示ä¾ï¼éè¿è¯¥ç¤ºä¾å¤§å®¶å¯ä»¥ç¥éå¦ä½å建æ°ç»ãè·åæ°ç»é¿åº¦ãè·å/å é¤ç¹å®ä½ç½®çæ°ç»å
ç´ ãå 餿´ä¸ªæ°ç»ä»¥åéåæ°ç»ã
```shell
#!/bin/bash
array=(1 2 3 4 5);
# è·åæ°ç»é¿åº¦
length=${#array[@]}
# æè
length2=${#array[*]}
#è¾åºæ°ç»é¿åº¦
echo $length #è¾åºï¼5
echo $length2 #è¾åºï¼5
# è¾åºæ°ç»ç¬¬ä¸ä¸ªå
ç´
echo ${array[2]} #è¾åºï¼3
unset array[1]# å é¤ä¸è¡¨ä¸º1çå
ç´ ä¹å°±æ¯å é¤ç¬¬äºä¸ªå
ç´
for i in ${array[@]};do echo $i ;done # éåæ°ç»ï¼è¾åºï¼ 1 3 4 5
unset arr_number; # å 餿°ç»ä¸çææå
ç´
for i in ${array[@]};do echo $i ;done # éåæ°ç»ï¼æ°ç»å
ç´ ä¸ºç©ºï¼æ²¡æä»»ä½è¾åºå
容
```
## Shell åºæ¬è¿ç®ç¬¦
> 说æï¼å¾çæ¥èªãè鏿ç¨ã
Shell ç¼ç¨æ¯æä¸é¢å ç§è¿ç®ç¬¦
- ç®æ°è¿ç®ç¬¦
- å
³ç³»è¿ç®ç¬¦
- å¸å°è¿ç®ç¬¦
- å符串è¿ç®ç¬¦
- æä»¶æµè¯è¿ç®ç¬¦
### ç®æ°è¿ç®ç¬¦

æä»¥å æ³è¿ç®ç¬¦åä¸ä¸ªç®åç示ä¾ï¼
```shell
#!/bin/bash
a=3;b=3;
val=`expr $a + $b`
#è¾åºï¼Total value : 6
echo "Total value : $val
```
### å
³ç³»è¿ç®ç¬¦
å
³ç³»è¿ç®ç¬¦åªæ¯ææ°åï¼ä¸æ¯æå符串ï¼é¤éå符串ç弿¯æ°åã

éè¿ä¸ä¸ªç®åçç¤ºä¾æ¼ç¤ºå
³ç³»è¿ç®ç¬¦ç使ç¨ï¼ä¸é¢shellç¨åºçä½ç¨æ¯å½score=100çæ¶åè¾åºAå¦åè¾åºBã
```shell
#!/bin/bash
score=90;
maxscore=100;
if [ $score -eq $maxscore ]
then
echo "A"
else
echo "B"
fi
```
è¾åºç»æï¼
```
B
```
### é»è¾è¿ç®ç¬¦

示ä¾ï¼
```shell
#!/bin/bash
a=$(( 1 && 0))
# è¾åºï¼0ï¼é»è¾ä¸è¿ç®åªæç¸ä¸çä¸¤è¾¹é½æ¯1ï¼ä¸çç»æææ¯1ï¼å¦åä¸çç»ææ¯0
echo $a;
```
### å¸å°è¿ç®ç¬¦

è¿éå°±ä¸åæ¼ç¤ºäºï¼åºè¯¥æºç®åçã
### å符串è¿ç®ç¬¦

ç®å示ä¾ï¼
```shell
#!/bin/bash
a="abc";
b="efg";
if [ $a = $b ]
then
echo "a çäº b"
else
echo "a ä¸çäº b"
fi
```
è¾åºï¼
```
a ä¸çäº b
```
### æä»¶ç¸å
³è¿ç®ç¬¦

ä½¿ç¨æ¹å¼å¾ç®åï¼æ¯å¦æä»¬å®ä¹å¥½äºä¸ä¸ªæä»¶è·¯å¾`file="/usr/learnshell/test.sh"` 妿æä»¬æ³å¤æè¿ä¸ªæä»¶æ¯å¦å¯è¯»ï¼å¯ä»¥è¿æ ·`if [ -r $file ]` 妿æ³å¤æè¿ä¸ªæä»¶æ¯å¦å¯åï¼å¯ä»¥è¿æ ·`-w $file`ï¼æ¯ä¸æ¯å¾ç®åã
## shellæµç¨æ§å¶
### if æ¡ä»¶è¯å¥
ç®åç if else-if else çæ¡ä»¶è¯å¥ç¤ºä¾
```shell
#!/bin/bash
a=3;
b=9;
if [ $a = $b ]
then
echo "a çäº b"
elif [ $a > $b ]
then
echo "a å¤§äº b"
else
echo "a å°äº b"
fi
```
è¾åºç»æï¼
```
a å¤§äº b
```
ç¸ä¿¡å¤§å®¶éè¿ä¸é¢ç示ä¾å°±å·²ç»ææ¡äº shell ç¼ç¨ä¸ç if æ¡ä»¶è¯å¥ãä¸è¿ï¼è¿è¦æå°çä¸ç¹æ¯ï¼ä¸åäºæä»¬å¸¸è§ç Java 以å PHP ä¸ç if æ¡ä»¶è¯å¥ï¼shell if æ¡ä»¶è¯å¥ä¸ä¸è½å
å«ç©ºè¯å¥ä¹å°±æ¯ä»ä¹é½ä¸åçè¯å¥ã
### for 循ç¯è¯å¥
éè¿ä¸é¢ä¸ä¸ªç®åç示ä¾è®¤è¯ for 循ç¯è¯å¥æåºæ¬ç使ç¨ï¼å®é
ä¸ for 循ç¯è¯å¥çåè½æ¯ä¸é¢ä½ çå°ç示ä¾å±ç°çè¦å¤§å¾å¤ã
**è¾åºå½åå表ä¸çæ°æ®ï¼**
```shell
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
```
**产ç 10 ä¸ªéæºæ°ï¼**
```shell
#!/bin/bash
for i in {0..9};
do
echo $RANDOM;
done
```
**è¾åº1å°5:**
é常æ
åµä¸ shell åéè°ç¨éè¦å $,使¯ for ç (()) ä¸ä¸éè¦,ä¸é¢æ¥çä¸ä¸ªä¾åï¼
```shell
#!/bin/bash
for((i=1;i<=5;i++));do
echo $i;
done;
```
### while è¯å¥
**åºæ¬ç while 循ç¯è¯å¥ï¼**
```shell
#!/bin/bash
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
```
**while循ç¯å¯ç¨äºè¯»åé®çä¿¡æ¯ï¼**
```shell
echo 'æä¸