九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
linux bash shell 最常用的函數(shù)和指令(備忘查詢)

hello.sh

#!/bin/bashVAR='world'echo 'Hello $VAR!' # => Hello world!

執(zhí)行腳本

$ bash hello.sh

變量

NAME='John'echo ${NAME} # => John (變量)echo $NAME # => John (變量)echo '$NAME' # => John (變量)echo '$NAME' # => $NAME (字符串原樣輸出)echo '${NAME}!' # => John! (變量)NAME = 'John' # => Error (注意不能有空格)

注釋

# 這是一個(gè)內(nèi)聯(lián) Bash 注釋。: '這是一個(gè)非常整潔的bash 注釋'

多行注釋使用 :' 打開(kāi)和 ' 關(guān)閉

參數(shù)

$1 … $9

參數(shù) 1 ... 9

$0

腳本本身的名稱

$1

第一個(gè)參數(shù)

${10}

位置參數(shù) 10

$#

參數(shù)數(shù)量

$$

shell 的進(jìn)程 id

$*

所有參數(shù)

$@

所有參數(shù),從第一個(gè)開(kāi)始

$-

當(dāng)前選項(xiàng)

$_

上一個(gè)命令的最后一個(gè)參數(shù)

見(jiàn):特殊參數(shù)

函數(shù)

get_name() { echo 'John'}echo 'You are $(get_name)'

見(jiàn):函數(shù)

條件句

if [[ -z '$string' ]]; then    echo 'String is empty'elif [[ -n '$string' ]]; then    echo 'String is not empty'fi

見(jiàn):條件句

大括號(hào)擴(kuò)展

echo {A,B}.js

{A,B}

與 A B 相同

{A,B}.js

與 A.js B.js 相同

{1..5}

與 1 2 3 4 5 相同

見(jiàn):大括號(hào)擴(kuò)展

Shell 執(zhí)行

# => I'm in /當(dāng)前/的/路徑echo 'I'm in $(PWD)'# Same as:echo 'I'm in `pwd`'

見(jiàn):命令替換

Bash 參數(shù)擴(kuò)展

語(yǔ)法

${FOO%suffix}

刪除后綴

${FOO#prefix}

刪除前綴

${FOO%%suffix}

去掉長(zhǎng)后綴

${FOO##prefix}

刪除長(zhǎng)前綴

${FOO/from/to}

替換第一個(gè)匹配項(xiàng)

${FOO//from/to}

全部替換

${FOO/%from/to}

替換后綴

${FOO/#from/to}

替換前綴

子字符串

${FOO:0:3}

子串 (位置,長(zhǎng)度)

${FOO:(-3):3}

從右邊開(kāi)始的子串

Length

${#FOO}

$FOO 的長(zhǎng)度

默認(rèn)值

${FOO:-val}

$FOO,如果未設(shè)置,則為 val

${FOO:=val}

如果未設(shè)置,則將 $FOO 設(shè)置為 val

${FOO:+val}

val 如果設(shè)置了$FOO

${FOO:?message}

如果 $FOO 未設(shè)置,則顯示消息并退出

替代 Substitution

echo ${food:-Cake} #=> $food or 'Cake'
STR='/path/to/foo.cpp'echo ${STR%.cpp}    # /path/to/fooecho ${STR%.cpp}.o  # /path/to/foo.oecho ${STR%/*}      # /path/toecho ${STR##*.}     # cpp (extension)echo ${STR##*/}     # foo.cpp (basepath)echo ${STR#*/}      # path/to/foo.cppecho ${STR##*/}     # foo.cppecho ${STR/foo/bar} # /path/to/bar.cpp

切片 Slicing

name='John'echo ${name} # => Johnecho ${name:0:2} # => Joecho ${name::2} # => Joecho ${name::-1} # => Johecho ${name:(-1)} # => necho ${name:(-2)} # => hnecho ${name:(-2):2} # => hnlength=2echo ${name:0:length} # => Jo

見(jiàn):參數(shù)擴(kuò)展

基本路徑和目錄路徑

SRC='/path/to/foo.cpp'
BASEPATH=${SRC##*/} echo $BASEPATH # => 'foo.cpp'DIRPATH=${SRC%$BASEPATH}echo $DIRPATH # => '/path/to/'

Transform

STR='HELLO WORLD!'echo ${STR,}      # => hELLO WORLD!echo ${STR,,}     # => hello world!STR='hello world!'echo ${STR^}      # => Hello world!echo ${STR^^}     # => HELLO WORLD!ARR=(hello World)echo '${ARR[@],}' # => hello worldecho '${ARR[@]^}' # => Hello World

Bash 數(shù)組

定義數(shù)組

Fruits=('Apple' 'Banana' 'Orange')Fruits[0]='Apple'Fruits[1]='Banana'Fruits[2]='Orange'ARRAY1=(foo{1..2}) # => foo1 foo2ARRAY2=({A..D}) # => A B C D# 合并 => foo1 foo2 A B C DARRAY3=(${ARRAY1[@]} ${ARRAY2[@]})# 聲明構(gòu)造declare -a Numbers=(1 2 3)Numbers+=(4 5) # 附加 => 1 2 3 4 5

索引

${Fruits[0]}

第一個(gè)元素

${Fruits[-1]}

最后一個(gè)元素

${Fruits[*]}

所有元素

${Fruits[@]}

所有元素

${#Fruits[@]}

總數(shù)

${#Fruits}

第一節(jié)長(zhǎng)度

${#Fruits[3]}

第n個(gè)長(zhǎng)度

${Fruits[@]:3:2}

范圍

${!Fruits[@]}

所有 Key

迭代 Iteration

Fruits=('Apple' 'Banana' 'Orange')for e in '${Fruits[@]}'; do    echo $edone

With index

for i in '${!Fruits[@]}'; do printf '%s\t%s\n' '$i' '${Fruits[$i]}'done

操作

Fruits=('${Fruits[@]}' 'Watermelon')         # 添加Fruits+=('Watermelon')                       # 也是添加Fruits=( ${Fruits[@]/Ap*/} )                 # 通過(guò)正則表達(dá)式匹配刪除unset Fruits[2]                              # 刪除一項(xiàng)Fruits=('${Fruits[@]}')                      # 復(fù)制Fruits=('${Fruits[@]}' '${Veggies[@]}')      # 連接lines=(`cat 'logfile'`)                      # 從文件中讀取

數(shù)組作為參數(shù)

function extract(){ local -n myarray=$1 local idx=$2 echo '${myarray[$idx]}'}Fruits=('Apple' 'Banana' 'Orange')extract Fruits 2 # => Orangle

Bash 字典

定義

declare -A sounds
sounds[dog]='bark'sounds[cow]='moo'sounds[bird]='tweet'sounds[wolf]='howl'

使用字典

echo ${sounds[dog]} # Dog's soundecho ${sounds[@]}   # All valuesecho ${!sounds[@]}  # All keysecho ${#sounds[@]}  # Number of elementsunset sounds[dog]   # Delete dog

迭代

for val in '${sounds[@]}'; do echo $valdone

for key in '${!sounds[@]}'; do    echo $keydone

Bash 條件句

整數(shù)條件

[[ NUM -eq NUM ]]

等于 Equal

[[ NUM -ne NUM ]]

不等于 Not equal

[[ NUM -lt NUM ]]

小于 Less than

[[ NUM -le NUM ]]

小于等于 Less than or equal

[[ NUM -gt NUM ]]

大于 Greater than

[[ NUM -ge NUM ]]

大于等于 Greater than or equal

(( NUM < NUM ))

小于

(( NUM <= NUM ))

小于或等于

(( NUM > NUM ))

比...更大

(( NUM >= NUM ))

大于等于

字符串條件

[[ -z STR ]]

空字符串

[[ -n STR ]]

非空字符串

[[ STR == STR ]]

相等

[[ STR = STR ]]

相等(同上)

[[ STR < STR ]]

小于 (ASCII)

[[ STR > STR ]]

大于 (ASCII)

[[ STR != STR ]]

不相等

[[ STR =~ STR ]]

正則表達(dá)式

例子

字符串

if [[ -z '$string' ]]; then echo 'String is empty'elif [[ -n '$string' ]]; then echo 'String is not empty'else echo 'This never happens'fi

組合

if [[ X && Y ]]; then    ...fi

相等

if [[ '$A' == '$B' ]]; then ...fi

正則表達(dá)式

if [[ '1. abc' =~ ([a-z]+) ]]; then    echo ${BASH_REMATCH[1]}fi

小于

if (( $a < $b )); then echo '$a is smaller than $b'fi

存在

if [[ -e 'file.txt' ]]; then    echo 'file exists'fi

文件條件

[[ -e FILE ]]

存在

[[ -d FILE ]]

目錄

[[ -f FILE ]]

文件

[[ -h FILE ]]

符號(hào)鏈接

[[ -s FILE ]]

大小 > 0 字節(jié)

[[ -r FILE ]]

可讀

[[ -w FILE ]]

可寫(xiě)

[[ -x FILE ]]

可執(zhí)行文件

[[ f1 -nt f2 ]]

f1 比 f2 新

[[ f1 -ot f2 ]]

f2 比 f1 新

[[ f1 -ef f2 ]]

相同的文件

更多條件

[[ -o noclobber ]]

如果啟用 OPTION

[[ ! EXPR ]]

不是 Not

[[ X && Y ]]

和 And

[[ X || Y ]]

或者 Or

邏輯和,或

if [ '$1' = 'y' -a $2 -gt 0 ]; then echo 'yes'fiif [ '$1' = 'n' -o $2 -lt 0 ]; then echo 'no'fi

Bash 循環(huán)

基本 for 循環(huán)

for i in /etc/rc.*; do    echo $idone

類似 C 的 for 循環(huán)

for ((i = 0 ; i < 100 ; i++)); do echo $idone

范圍

for i in {1..5}; do    echo 'Welcome $i'done

步長(zhǎng)

for i in {5..50..5}; do echo 'Welcome $i'done

自動(dòng)遞增

i=1while [[ $i -lt 4 ]]; do    echo 'Number: $i'    ((i++))done

自動(dòng)遞減

i=3while [[ $i -gt 0 ]]; do echo 'Number: $i' ((i--))done

Continue

for number in $(seq 1 3); do    if [[ $number == 2 ]]; then        continue;    fi    echo '$number'done

Break

for number in $(seq 1 3); do if [[ $number == 2 ]]; then # Skip entire rest of loop. break; fi # This will only print 1 echo '$number'done

Until

count=0until [ $count -gt 10 ]; do    echo '$count'    ((count++))done

死循環(huán)

while true; do # here is some code.done

死循環(huán)(簡(jiǎn)寫(xiě))

while :; do    # here is some code.done

讀取文件的每一行

cat file.txt | while read line; do echo $linedone

Bash 函數(shù)

定義函數(shù)

myfunc() {  echo 'hello $1'}
# 同上(替代語(yǔ)法)function myfunc() { echo 'hello $1'}
myfunc 'John'

返回值

myfunc() { local myresult='some value' echo $myresult}
result='$(myfunc)'

拋出錯(cuò)誤

myfunc() { return 1}
if myfunc; then    echo 'success'else    echo 'failure'fi

Bash 選項(xiàng)

選項(xiàng)

# 避免覆蓋文件# (echo 'hi' > foo)set -o noclobber# 用于出錯(cuò)時(shí)退出# 避免級(jí)聯(lián)錯(cuò)誤set -o errexit # 揭示隱藏的失敗set -o pipefail # 公開(kāi)未設(shè)置的變量set -o nounset

全局選項(xiàng)

# 不匹配的 glob 被刪除# ('*.foo' => '')shopt -s nullglob   # 不匹配的 glob 拋出錯(cuò)誤shopt -s failglob  # 不區(qū)分大小寫(xiě)的球體shopt -s nocaseglob # 通配符匹配點(diǎn)文件# ('*.sh' => '.foo.sh')shopt -s dotglob    # 允許 ** 進(jìn)行遞歸匹配# ('lib/**/*.rb' => 'lib/a/b/c.rb')shopt -s globstar   

Bash 歷史

命令

history

顯示歷史

sudo !!

使用 sudo 運(yùn)行上一個(gè)命令

shopt -s histverify

不要立即執(zhí)行擴(kuò)展結(jié)果

表達(dá)式

!$

展開(kāi)最新命令的最后一個(gè)參數(shù)

!*

展開(kāi)最新命令的所有參數(shù)

!-n

展開(kāi)第 n 個(gè)最近的命令

!n

展開(kāi)歷史中的第 n 個(gè)命令

!<command>

展開(kāi)最近調(diào)用的命令 <command>

操作

!!

再次執(zhí)行最后一條命令

!!:s/<FROM>/<TO>/

在最近的命令中將第一次出現(xiàn)的 <FROM> 替換為 <TO>

!!:gs/<FROM>/<TO>/

在最近的命令中將所有出現(xiàn)的 <FROM> 替換為 <TO>

!$:t

僅從最近命令的最后一個(gè)參數(shù)擴(kuò)展基本名稱

!$:h

僅從最近命令的最后一個(gè)參數(shù)展開(kāi)目錄

!! 和 !$ 可以替換為任何有效的擴(kuò)展。

切片 Slices

!!:n

僅擴(kuò)展最近命令中的第 n 個(gè)標(biāo)記(命令為 0;第一個(gè)參數(shù)為 1)

!^

從最近的命令展開(kāi)第一個(gè)參數(shù)

!$

從最近的命令中展開(kāi)最后一個(gè)標(biāo)記

!!:n-m

從最近的命令擴(kuò)展令牌范圍

!!:n-$

從最近的命令中將第 n 個(gè)標(biāo)記展開(kāi)到最后

!! 可以替換為任何有效的擴(kuò)展,即 !cat、!-2、!42 等。

雜項(xiàng)

數(shù)值計(jì)算

$((a + 200)) # Add 200 to $a
$(($RANDOM%200))  # Random number 0..199

子 shell

(cd somedir; echo 'I'm now in $PWD')pwd # still in first directory

檢查命令

command -V cd#=> 'cd is a function/alias/whatever'

重定向

python hello.py > output.txt # 標(biāo)準(zhǔn)輸出到(文件)python hello.py >> output.txt # 標(biāo)準(zhǔn)輸出到(文件),追加python hello.py 2> error.log # 標(biāo)準(zhǔn)錯(cuò)誤到(文件)python hello.py 2>&1 # 標(biāo)準(zhǔn)錯(cuò)誤到標(biāo)準(zhǔn)輸出python hello.py 2>/dev/null # 標(biāo)準(zhǔn)錯(cuò)誤到(空null)python hello.py &>/dev/null # 標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤到(空null
python hello.py < foo.txt      # 將 foo.txt 提供給 python 的標(biāo)準(zhǔn)輸入

來(lái)源相對(duì)

source '${0%/*}/../share/foo.sh'

腳本目錄

DIR='${0%/*}'

Case/switch

case '$1' in start | up) vagrant up ;; *) echo 'Usage: $0 {start|stop|ssh}' ;;esac

陷阱錯(cuò)誤

trap 'echo Error at about $LINENO' ERR

或者

traperr() { echo 'ERROR: ${BASH_SOURCE[1]} at about ${BASH_LINENO[0]}'}set -o errtracetrap traperr ERR

printf

printf 'Hello %s, I'm %s' Sven Olga#=> 'Hello Sven, I'm Olgaprintf '1 + 1 = %d' 2#=> '1 + 1 = 2'printf 'Print a float: %f' 2#=> 'Print a float: 2.000000'

獲取選項(xiàng)

while [[ '$1' =~ ^- && ! '$1' == '--' ]]; do case $1 in -V | --version ) echo $version exit ;; -s | --string ) shift; string=$1 ;; -f | --flag ) flag=1 ;;esac; shift; doneif [[ '$1' == '--' ]]; then shift; fi

檢查命令的結(jié)果

if ping -c 1 google.com; then    echo '看來(lái)您的互聯(lián)網(wǎng)連接正常'fi

特殊變量

$?

最后一個(gè)任務(wù)的退出狀態(tài)

$!

最后一個(gè)后臺(tái)任務(wù)的 PID

$$

shell PID

$0

shell 腳本的文件名

見(jiàn)特殊參數(shù)。

grep 檢查

if grep -q 'foo' ~/.bash_history; then echo '您過(guò)去似乎輸入過(guò)“foo”'fi

反斜杠轉(zhuǎn)義


  • !
  • '
  • #
  • &
  • '
  • (
  • )
  • ,
  • ;
  • <
  • >
  • [
  • |
  • \
  • ]
  • ^
  • {
  • }
  • `
  • $
  • *
  • ?

使用 \ 轉(zhuǎn)義這些特殊字符

Heredoc

cat <<ENDhello worldEND

轉(zhuǎn)到上一個(gè)目錄

pwd # /home/user/foocd bar/pwd # /home/user/foo/barcd -pwd # /home/user/foo

讀取輸入

echo -n 'Proceed? [y/n]: 'read ansecho $ans
read -n 1 ans # 只有一個(gè)字符

條件執(zhí)行

git commit && git pushgit commit || echo 'Commit failed'

嚴(yán)格模式

set -euo pipefailIFS=$'\n\t'

參見(jiàn):非官方 bash 嚴(yán)格模式

可選參數(shù)

args=('$@')args+=(foo)args+=(bar)echo '${args[@]}'

將參數(shù)放入數(shù)組中,然后追加

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
小萌新—> Linux高手系列:包管理【二】
DOS里如何判斷文件大小及其它?我的一些
Linux Shell簡(jiǎn)明教程(一) | 果凍想
shell淺談之三for、while、until循環(huán)
Linux之Shell腳本編程(一)
40 個(gè)簡(jiǎn)單又有效的 Linux Shell 腳本示例
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服