1. 程式人生 > 其它 >再讀:Linux系統命令及Shell指令碼實踐指南(三)

再讀:Linux系統命令及Shell指令碼實踐指南(三)

再讀:Linux系統命令及Shell指令碼實踐指南(三)

第十四章 測試和判斷

$?可以看命令的返回值。

test和命令測試,

#方法一
kang@Mac :: ~/Downloads/PWN » test -e /var
kang@Mac :: ~/Downloads/PWN » echo $?
0
#方法二:
kang@Mac :: ~/Downloads/PWN 2 » [ -e /var ]
kang@Mac :: ~/Downloads/PWN » echo $?
0

if/else 判斷

# 例項一
FILE="/var"
if [ -e $FILE ];then
echo "$FILE exist"
else
echo "$FILE not exist"
fi

#例項二
#!/bin/bash
echo -n "Hello world\n"
read SCORE
if [ "$SCORE" -lt 60 ];then
echo "pass"
else
echo "no pass"
fi

case 判斷

#!/bin/bash
OS=$(uname -s)
case "$OS" in
Linux) echo "This is Linux" ;;
Darwin) echo "This is Mac Os" ;;
*) echo "Others system" ;;
esac

seq命令類似python中range,可以輸出不同型別的序列

- Sequence from 1 to 10:
seq 10

- Every 3rd number from 5 to 20:
seq 5 3 20

- Separate the output with a space instead of a newline:
seq -s " " 5 3 20

- Format output width to a minimum of 4 digits padding with zeros as necessary:
seq -f "%04g" 5 3 20

第十五章 迴圈

for迴圈

#方法一
#!/bin/bash

for VAR in $(seq 1 10)
do
echo "Loop $VAR times"
done

#方法二,類似C++
for ((i=0;i<=10;i++))#注意是兩個括號
do
echo "Loop $i times"
done

let命令,用於執行一個或多個表示式,變數計算中不需要加上 $ 來表示變數

#!/bin/bash
sum=0
for VAR in $(seq 1 10)
do
let "sum+=VAR"
done
echo "In total: $sum"

select是一種選單擴充套件迴圈方式,其語法和帶列表的for迴圈非常類似,基本結構如下

#!/bin/bash
echo "Hello world\n"

select VAR in apple banana beer
do
break
done
echo "You chose $VAR"
#效果
kang@Mac :: ~/Downloads/PWN » . ./shell.sh
Hello world

1) apple 2) banana 3) beer
?# 1
You chose apple

第十六章 函式

函式定義

#!/bin/bash
sayHello(){

echo "HELLO"
}
echo "call sayHello"
sayHello

函式返回值利用

#!/bin/bash
FILE=/etc/notexistFIle
readFILE(){
if [ -f $FILE ];then# 空格總是容易忽略
return 0
else
return 1
fi#fi也總是容易忘記
}
readFILE
if [ $? -eq 0 ];then# $?返回上一個命令的狀態
echo "$FILE exist"
else
echo "$FILE not exist"
fi

有引數函式使用

#!/bin/bash
readFILE(){
if [ -f $1 ];then
return 0
else
return 1
fi
}
readFILE
if [ $? -eq 0 ];then
echo "$1 exist"
else
echo "$1 not exist"
echo "$2 lllll"
fi

計算一個數的多次方

#!/bin/bash
calculate(){
VALUE=1
for ((i=1;i<=$2;i++))
do
let "VALUE=VALUE*$1"
done
}
calculate $1 $2#這裡的引數要有宣告,否則會報錯
echo "In total: $VALUE"

第十七章 重定向

所謂“重定向”,就是將原本應該從標準輸入裝置(鍵盤)輸入的資料,改由其他檔案或裝置輸入;或將原本應該輸出到標準輸出裝置(顯示器)的內容,改而輸出到其他檔案或裝置上。

I/O重定向可以將任何檔案、命令、指令碼、程式或指令碼的輸出重定向到另外一個檔案、命令、程式或指令碼。

檔案識別符號重定向中很重要的一個概念

Linux使用0到9的整數指明瞭與特定程序相關的資料流,系統在啟動一個程序的同時會為該程序開啟三個檔案:標準輸入(stdin)、標準輸出(stdout)、標準錯誤輸出(stderr),分別用檔案識別符號0、1、2來標識。
如果要為程序開啟其他的輸入輸出,則需要從整數3開始標識。

標準輸出覆蓋重定向其實是預設將檔案識別符號為1的內容重定向到指定檔案中

kang@Mac :: source/go/project » ls -l > qwe.txt
#等同於 ls -l 1> qwe.txt
kang@Mac :: source/go/project » cat qwe.txt
total 24
drwxr-xr-x@ 3 a staff 96 10 27 10:59 handler
-rwxr-xr-x@ 1 a staff 10887 10 27 10:59 main.go
-rw-r--r-- 1 a staff 0 12 17 16:55 qwe.txt
drwxr-xr-x@ 4 a staff 128 10 27 10:59 static
drwxr-xr-x@ 5 a staff 160 10 27 10:59 templates
drwxr-xr-x@ 3 a staff 96 10 27 10:59 upload

**標識輸出重定向:>&**

標識輸出重定向的作用是將一個標識的輸出重定向到另一個標識的輸入。

使用場景,重定向錯誤資訊

kang@Mac :: source/go/project 130 » find / -name *.txt > qwe.txt
find: /usr/sbin/authserver: Permission denied
find: /Library/Application Support/Apple/ParentalControls/Users: Permission denied
#錯誤資訊沒有寫入到檔案裡面,仍然是顯示在頁面。
kang@Mac :: source/go/project 130 » cat qwe.txt
kang@Mac :: source/go/project »

使用標識輸出重定向:>&

kang@Mac :: source/go/project » find / -name *.txt > qwe.txt 2>&1
^C
kang@Mac :: source/go/project 130 » cat qwe.txt
find: /usr/sbin/authserver: Permission denied
find: /Library/Application Support/Apple/ParentalControls/Users: Permission denied

標準輸入重定向:<

標準輸入重定向可以將原本應由從標準輸入裝置中讀取的內容轉由檔案內容輸入,也就是將檔案內容寫入標準輸入中。

kang@Mac :: source/go/project 255 » sort
qwer
adsf
edc
#標準輸入進行了排序 結束control+D
adsf
edc
qwer
#使用標準輸入重定向:< 來重定向排序,交給sort處理
kang@Mac :: source/go/project » sort < qwe.txt
ads
asdp
dsnt
jiup

本文來自部落格園,作者:OutBxx,轉載請註明原文連結:https://www.cnblogs.com/OutBxx/p/15714037.html