Shell - shell是必備的技能

shell魔力在於它可以將Linux中的工具直接寫到腳本里,在terminal中使用的命令可以直接寫到程序中,後面你會意識到這是一個多麼了不起的事情!所以學好shell,其實並不只是指shell語言本身,比如if、for等這些控制結構,還包括Linux發行版中一下內置工具,比如cat、sed、awk、xargs、管道等非常常用等工具的使用,下面我們先從shell語言本身說起。

shell有很多種,bash幾乎已經是標準了,所以以下我們談論的都以bash爲準。

shell不適合做什麼

  1. 資源密集型,如排序
  2. 計算密集型,如浮點型運算,效率不高
  3. 有複雜的邏輯,shell邏輯控制能力不強

 

一、shell語言本身

1.1 類型與變量

 

1.2 條件控制

if

if 要注意其結尾要使用fi,elseif簡寫爲elif,例如

if condition
then
    commands
elif condition
then
    commands
else
    commands
fi

1.3 循環

for

for有兩種形式,for_i 與 for_in ,

# for_i
for((i=0;i<10;i++));
do
    echo $i
done

# for_in
for VAR in $LIST
do
    echo $VAR
done

遍歷一個數組

EXAMPLE_ARR=("123" "234" "012")
for str in "${EXAMPLE_ARR[@]}"
do
  echo "$str"
done

遍歷數組時需要index

EXAMPLE_ARR=("123" "234" "012")
for i in "${!EXAMPLE_ARR[@]}"
do
  echo "$i"
done

這語法和其他語言可是大相徑庭。

上面我們說到“可以將Linux中的工具直接寫到腳本里”,這裏我們就是用for直接遍歷一個目錄:

for file in "ls ~/"
do
  echo "$file"
done

sleep

程序暫停執行,等待某項任務: sleep 20,默認單位爲秒。

1.4 函數

函數傳定義和其他語言(如golang、nodejs)相比,沒有什麼本質不同,但是傳參和調用方式卻不太一樣,參數不寫在函數定義中,函數體中直接使用$n來引用參數,返回值可以使用return、echo或者xargs,函數執行後,可以通過$?來引用結果:

[function] func_name()
{
    # code
}

 

#!/bin/bash

function learnGolang()
{
    echo "learn golang in $1"

    return 12
}

learnGolang "fourty five minutes"

echo "the result of func is $?"

 

1.5 空格的使用

shell中空格不能隨便使用,比如聲明一個變量,等號兩邊不能有空格:

# valid
var1="test1"
echo $var1

# not valid
var2 = "test2"
echo $var2

二、shell中可以使用其他工具來完成各種類型的任務

新建文件並寫入內容,寫入內容中甚至可以包含變量

cat > test.txt <<EOF
something need to write is : ${var1}
EOF

修改文件內容

我們手動修改使用vim,在程序中更方便的是sed。

拷貝文件:cp、mv、scp

發佈了81 篇原創文章 · 獲贊 263 · 訪問量 54萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章