bash命令和語法--帶你升級打boss

bash 跟着敲

前言:本文不僅僅是介紹經常使用的命令,還融入了bash語法,每一個知識點都有淺顯的例子配合,讓你很容易消化並吸取,最後還有一個boss任務等你挑戰,耐心學完的同窗確定會有很大的收穫的。你們以爲有用的話,star一下,而後能夠隨意分享給須要的人,重點是加顆星星哦,加顆星星哦,加顆星星哦。html

一. 硬件、內核、shell

下面這張摘自鳥哥的圖能夠很好的說明
linux

二. 命令行

1. 基本操做

export

展現所有的環境變量,若是你想獲取某個特殊的變量,用 echo $變量名

git

whatis

展現用戶命令,系統調用、庫函數等
github

whereis

搜索可執行文件、源文件
正則表達式

which

在環境變量中搜索可執行文件,並打印完整路徑
shell

clear

清空屏幕
數組

2. 文件操做

cat

在屏幕上顯示文本文件
bash

chmod

能夠改變文件和目錄的讀、寫、執行權限
linux 中的用戶、組、文件網絡

cp

複製文件
ssh

diff

比較文件,我在上面複製的文件中加了一行diff

find

查找文件,能夠經過正則來查

head

查看文件前10行

ls

顯示全部文件,-l顯示長格式化 -a顯示包括隱藏文件

mv

移動文件,同時也能夠重命名文件

rm

刪除文件,-r刪除目錄 -f強制刪除

touch

建立新文件

3. 文本操做

awk

很是有用的一個文本處理命令,逐行運行,默認使用空格分割,-F表示分割的樣式

grep

匹配正則表達式的文本行,並輸出,-E正則模糊匹配 -F精確字母匹配 -w精確單詞匹配

sed

正則替換

sort

排序

wc

統計文本行數,單詞數,字符數

4. 目錄操做

cd

進入目錄

mkdir

建立目錄

pwd

當前目錄的路徑

5. SSH,系統信息,網絡操做

cal

月曆

date

當前日期和時間

df

磁盤使用狀況

du

文件或目錄使用狀況

ps

列出你的進程

ssh

遠程鏈接

top

列出固然活動進程

三. 語法

1 條件判斷

1.1 test判斷語句

test是關鍵字,表示判斷;EXPRESSION是被判斷的語句。

echo $? 輸出判斷結果,0表示成功,其餘表示失敗。

1.2 []條件判斷

中括號的左右擴弧和EXPRESSION之間都必須有空格!

文件類型判斷

字符串和數字判斷

2 if then else語句

例子1:判斷文件README.md是否是文件

#!/bin/bash

if [ -f ../README.md ];then
echo 'file exist'
else
echo 'file not exist'
fi

exit 0

例子2:提示用戶輸入值,若是大於0輸出’正數’,小於0輸出’負數‘,等於0輸出’零‘

#!/bin/bash

# 提示用戶輸入一個值
echo -n "請輸入一個數字:"

# 保存用戶輸入的值到num中
read num

if [ "$num" -gt 0 ];then
echo '正數'
elif [ "$num" -lt 0 ];then
echo '負數'
else
echo '零'
fi

exit 0

3 case語句

例子:提示用戶輸入Y/y或N/n。若輸入Y/y,則輸出「咱們約起來吧」;若輸入N/n,則輸出「不約,再見」;不然,「輸入有誤」

#!/bin/bash

echo -n "你單身嗎?(y/n)"

read val

case $val in
Y|y)
echo "咱們約起來吧"
;;
N|n)
echo "不約,再見"
;;
*)
echo "輸入有誤"
;;
esac

exit 0

4 for循環

例子1:輸出當前文件夾的一級子目錄中文件名字

#!/bin/bash

# 將ls的結果保存到變量CUR_DIR中
CUR_DIR=`ls`

# 顯示ls的結果
echo $CUR_DIR

for val in $CUR_DIR
do
if [ -f $val ];then
echo "FILE: $val"
fi
done

exit 0

例子2:輸出1-10之間數字的總和

#!/bin/bash

sum=0
for ((i=1;i<10;i++))
do
((sum=$sum+$i))
done

echo "sum=$sum"

exit 0

5 while循環

例子:從0開始逐步遞增,當數值等於5時,中止遞增

#!/bin/bash

val=0

while [ "$val" -lt 5 ]
do
echo "val=$val"
((val++))
done

exit 0

6 使用break和continue控制循環

break命令容許跳出循環

continue命令相似於 break命令,只有一點重要差異,它不會跳出循環,只是跳過這個循環步。

例子1:[break應用]從0開始逐步遞增,當數值等於5時,中止遞增。

#!/bin/bash

# 設置起始值爲0
val=0

while true
do
if [ "$val" -eq "5" ];then
# 若是val=5,則跳出循環
break;
else
# 輸出數值
echo "val=$val"
# 將數值加1
((val++))
fi
done

exit 0

例子2:[continue應用]從0開始逐步遞增到10:當數值爲5時,將數值遞增2;不然,輸出數值

#!/bin/bash

# 設置起始值爲0
val=0

while [ "$val" -le "10" ]
do
if [ "$val" -eq "5" ];then
# 若是val=5,則將數值加2
((val=$val+2))
continue;
else
# 輸出數值
echo "val=$val"
# 將數值加1
((val++))
fi
done

exit 0

四. 數組

1 數組定義

  • array=(10 20 30 40 50)

一對括號表示是數組,數組元素用「空格」符號分割開。引用數組時從序號0開始。

  • 除了上面的定義方式外,也能夠單獨定義數組:
array[0]=10
array[1]=20
array[2]=30
array[3]=40
array[4]=50
  • var="10 20 30 40 50"; array=($var)

2 數組操做

數組操做

#!/bin/bash

array=(10 20 30 40 50)

# 顯示數組中全部元素
echo '顯示數組中全部元素'
echo ${array[*]}
echo ${array[@]}

# 顯示數組第2項
echo '顯示數組第2項'
echo ${array[1]}

# 顯示數組長度
echo '顯示數組長度'
echo ${#array[@]}

# 輸出數組的第1-3項
echo '輸出數組的第1-3項'
echo ${array[@]:0:3}

# 將數組中的0替換成1
echo '將數組中的0替換成1'
echo ${array[@]/0/1}

# 刪除數組第2項元素  
# 說明:
# unset僅僅只清除array[1]的值,並無將array[1]刪除掉
echo '刪除數組第2項元素'
unset array[1]
echo ${array[@]}

exit 0

五.函數

函數實例

#!/bin/bash

# 編輯一個函數foo:打印foo的輸入參數的總數,並輸入每一個參數和參數對應的序號。
function foo()
{
    # 定義局部變量i
    local i=0 
    # 定義局部變量total=傳入foo的參數總數
    local total=$#
    # 輸出參數總數
    echo "total param =$total"
    # 輸出傳入foo的每個參數
    for val in $@
    do
        ((i++))
        echo "$i -- val=$val"
    done

    # 返回參數總數
    return $total
}

foo
foo param1 param2 param3
# 輸出foo param1 param2 param3的返回值
echo "return value=$?"

exit 0

六.數值運算

數值元算主要有4種實現方式:(())、let、expr、bc。
工做效率:(()) == let > expr > bc**
(())和let是bash內建命令,執行效率高;而expr和bc是系統命令,會消耗內存,執行效率低。
(())、let和expr只支持整數運算,不支持浮點運算;而bc支持浮點運算。

數值運算
實例1:用4中方式實現3*(5+2)

#!/bin/bash

# (())
val1=$((3*(5+2)))
echo "val1=$val1"

# let
let "val2=3*(5+2)"
echo "val2=$val2"

# expr
val3=`expr 3 \* \(5+2\)`
echo "val3=$val3"

# bc
val4=`echo "3*(5+2)"|bc`
echo "val4=$val4"

exit 0

實例3:5/3浮點運算,保留3位小數

#!/bin/bash

# bc 實現5/3浮點運算,保留3位小數
val5=`echo "scale=3; 5/3"|bc`
echo "val5=$val5"

exit 0

七. 字符運算

字符運算

#!/bin/bash

str='hello world'

# 顯示字符串
echo '顯示字符串'
echo ${str}

# 顯示字符串長度
echo '顯示字符串長度'
echo ${#str}

# 提取world
echo '提取world'
echo ${str:6}

# 提取or
echo '提取or'
echo ${str:7:2}

# 刪除hello
echo '刪除hello'
echo ${str#hello}

# 刪除world
echo '刪除world'
echo ${str%world}

# 將全部的字符l替換爲m
echo '將全部的字符l替換爲m'
echo ${str//l/m}

exit 0

八. bash調試

bash [-nvx] scripts.sh

選項與參數:
-n: 不要執行 script,僅查詢語法的問題;
-v: 再執行 sccript 前,先將 scripts 的內容輸出到屏幕上;
-x: 將使用到的 script 內容顯示到屏幕上,這是頗有用的參數!

例子:想要執行bash腳本,並查看bash的調用流程,能夠經過如下命令:

bash -x test.sh

echo [-neE] string

選項與參數:
-n: 輸出內容以後,不換行。默認是輸入內容以後,換行。
-e: 開啓反斜線「\」轉義功能
-E: 開啓反斜線「\」轉義功能(默認)。

例子:輸出please input a number:以後不換行

echo -n "please input a number:"

九. bash內建指令

echo

在屏幕上顯示出指定的字串

read

從標準輸入設備讀入一行,分解成若干字,賦值給bash程序內部定義的變量

alias

別名,alias l='ls -al'

export

export能夠把bash的變量向下帶入子bash(即子bash中可使用父bash的變量),從而讓子進程繼承父進程中的環境變量。但子bash不能用export把它的變量向上帶入父bash。

exec

當bash執行到exec語句時,不會去建立新的子進程,而是轉去執行指定的命令,當指定的命令執行完時,該進程(也就是最初的bash)就終止了,因此bash程序中exec後面的語句將再也不被執行。

.

使bash讀入指定的bash程序文件並依次執行文件中的全部語句。

exit

退出Shell程序,在exit以後可有選擇地指定一個數位做爲返回狀態。

十. 參考資料

十一. 大BOSS

後語:你們以爲有用的話,star一下,而後能夠隨意分享給須要的人,重點是加顆星星哦,加顆星星哦,加顆星星哦。

大BOSS

相關文章
相關標籤/搜索