bash學(xué)習(xí)筆記

快捷鍵操作

  • Ctrl + a:移到行首
  • Ctrl + b:向行首移動(dòng)一個(gè)字符,與左箭頭作用相同
  • Ctrl + e:移到行尾
  • Ctrl + f:向行尾移動(dòng)一個(gè)字符,與右箭頭作用相同
  • Alt + f:移動(dòng)到當(dāng)前單詞的詞尾( ESC + f )
  • Alt + b:移動(dòng)到當(dāng)前單詞的詞首 ( ESC + b )

變量

  • 讀取變量的時(shí)候,變量名也可以使用花括號(hào){}包圍,比如$a也可以寫(xiě)成${a}
    這種寫(xiě)法可以用于變量名與其他字符連用的情況
$ a=foo
$ echo $a_file


$ echo ${a}_file
foo_file
  • unset命令用來(lái)刪除一個(gè)變量
  • $$為當(dāng)前 Shell 的進(jìn)程 ID,可以用來(lái)命名臨時(shí)文件 LOGFILE=/tmp/output_log.$$
  • $_為上一個(gè)命令的最后一個(gè)參數(shù)
${varname:-word} 如果變量varname存在且不為空,則返回它的值,否則返回word
${varname:=word} 如果變量varname存在且不為空,則返回它的值,否則將它設(shè)為word
${varname:+word} 如果變量名存在且不為空,則返回word,否則返回空值
${varname:?message} 如果變量varname存在且不為空,則返回它的值,否則打印出varname: message
${#varname} 獲取字符串長(zhǎng)度
${varname:offset:length} 提取子字符串
${varname^^} 轉(zhuǎn)為大寫(xiě)
${varname,,} 轉(zhuǎn)為小寫(xiě)

算術(shù)

  • ((...))語(yǔ)法可以進(jìn)行整數(shù)的算術(shù)運(yùn)算

腳本

#!/usr/bin/env bash 
指定解釋器

# 給所有用戶執(zhí)行權(quán)限
$ chmod +x script.sh
# 給所有用戶讀權(quán)限和執(zhí)行權(quán)限
$ chmod +rx script.sh
# 或者
$ chmod 755 script.sh
  • getopts命令用在腳本內(nèi)部,可以解析復(fù)雜的腳本命令行參數(shù),通常與while循環(huán)一起使用,取出腳本所有的帶有前置連詞線(-)的參數(shù)
while getopts 'lha:' OPTION; do
  case "$OPTION" in
    l)
      echo "linuxconfig"
      ;;


    h)
      echo "h stands for h"
      ;;


    a)
      avalue="$OPTARG"
      echo "The value provided is $OPTARG"
      ;;
    ?)
      echo "script usage: $(basename $0) [-l] [-h] [-a somevalue]" >&2
      exit 1
      ;;
  esac
done
shift "$(($OPTIND - 1))"
  • 在shell腳本中,默認(rèn)情況下,總是有三個(gè)文件處于打開(kāi)狀態(tài),標(biāo)準(zhǔn)輸入(鍵盤(pán)輸入)、標(biāo)準(zhǔn)輸出(輸出到屏幕)、標(biāo)準(zhǔn)錯(cuò)誤(也是輸出到屏幕),它們分別對(duì)應(yīng)的文件描述符是0,1,2
1>&2 正確返回值傳遞給2輸出通道 &2表示2輸出通道
2>&1 錯(cuò)誤返回值傳遞給1輸出通道, 同樣&1表示1輸出通道
> /dev/null 所有傳給它的東西它都丟棄掉
#!/bin/bash
filename='/etc/hosts'


while read myline
do
  echo "$myline"
done < $filename

# 上面的例子通過(guò)read命令,讀取一個(gè)文件的內(nèi)容。
# done命令后面的定向符<,將文件內(nèi)容導(dǎo)向read命令,每次讀取一行,存入變量myline,直到文件讀取完畢。
  • read命令讀取的值,默認(rèn)是以空格分隔??梢酝ㄟ^(guò)自定義環(huán)境變量IFS(內(nèi)部字段分隔符,Internal Field Separator 的縮寫(xiě)),修改分隔標(biāo)志。

if結(jié)構(gòu)

if commands; then
  commands
[elif commands; then
  commands...]
[else
  commands]
fi
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。