shell編程簡述
具體shell命令詳見linux系統(tǒng)入門文集 此處僅介紹部分運(yùn)維操作

shell 既是一個解釋器也是一種編程語言
Shell 是一個用C語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設(shè)計(jì)語言
變量 ? ? ? ? ? 作用域 ? ? ? ? ? ? ? 聲明方式 ? ? ? ? ? ? ? ? 規(guī)范
自定義變量 ? ? ?當(dāng)前shell ? ? ? ? ? ?= ? ? ? ? ? ? ? ? ? ? ?字符串 整型 浮點(diǎn)型 日期型
環(huán)境變量 ? ? ? ?當(dāng)前shell和子shell ? export declare - x
系統(tǒng)環(huán)境變量 ? ? 所有shell
$0 ? ? 當(dāng)前shell名稱/腳本名稱
$# ? ? 傳入腳本的參數(shù)數(shù)量
$* ? ? 傳入腳本的所有參數(shù)
$? ? ? 上條命令執(zhí)行的狀態(tài)碼
$PS1 ? 命令提示符
$HOME ?用戶主文件夾
$PATH ?全局命令的搜索路徑PATH=$PATH:[新增路徑]
echo $HOME
<!--/root-->
echo $PS1
<!--\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$-->
嘗試修改原來的樣式 例如更偏好藍(lán)色箭頭+字體
vim ?~/.bashrc
<!--\033[01;34m\] 設(shè)置顏色字體-->
修改為 PS1='${debian_chroot:+($debian_chroot)}\033[01;32m\]\u@\h:\033[01;34m\]\w-->'
重定向 fd0 標(biāo)準(zhǔn)輸入 fd1 標(biāo)準(zhǔn)輸出 fd2 標(biāo)準(zhǔn)錯誤 ?>>追加寫入
cd test_file
<!--把終端輸出結(jié)果和標(biāo)準(zhǔn)錯誤寫入list.txt-->
ls -l >> list.txt 2>&1

<!--shell編程里面的函數(shù)-->
function 函數(shù)名()
{
函數(shù)語句
<!--return返回值(可選)-->
return
}
<!--注意:-->
<!--shell自上而下執(zhí)行,函數(shù)必須在使用前定義-->
<!--函數(shù)獲取變量和shellscript類似,$0代表函數(shù)名,后續(xù)參數(shù)通過$1、$2...獲取-->
<!--函數(shù)內(nèi)return僅僅表示函數(shù)執(zhí)行狀態(tài),不代表函數(shù)執(zhí)行結(jié)果-->
<!--返回結(jié)果一般使用echo、printf,在外面使用$()、``獲取結(jié)果-->
<!--如果沒有return,函數(shù)狀態(tài)是上一條命令的執(zhí)行狀態(tài),存儲在$?中-->
<!--shell編程中等號兩端不要留空格-->
模塊化 source 命令
<!--add.sh-->
#!/bin/bash
function add(){
? ?declare -i res_1=$1
? ?declare -i res_2=$2 ? # 聲明是一個整型
? ?res=$(($res_1+$res_2))
? ?echo $res
}
<!--exc.sh-->
#!/bin/bash
source './add.sh'
total=$(add 1 2)
echo $total
<!--轉(zhuǎn)化為可執(zhí)行文件-->
chmod +x ./exc.sh
./exc.sh

shell 展開
1.大括號展開
# 字符串序列
a{b,c,d}e => abe ace ade
# 表達(dá)式序列
{1..5} => 1,2,3,4,5
{1..5..2} => 1,3,5 ? # 以步長為2展開
{a..e} => a b c d e
2.波浪號展開
命令行字符串的第一個字符為波浪號(~)則執(zhí)行
~ => $HOME
3.參數(shù)展開
<!--間接參數(shù)擴(kuò)展${!parameter},其中引用的參數(shù)并不是parameter而是parameter的實(shí)際的值-->
parameter="var"
var="shell"
echo ${!parameter} ? parameter(通過!)-->var(通過${})-->shell
<!--參數(shù)長度${#parameter}-->
parameter=cd
echo ${#parameter} ?# 獲得參數(shù)的長度 打印2
<!--空參數(shù)處理-->
<!--${parameter:-word}#為空替換-->
<!--${parameter:=word}#為空替換,并將值賦給$parameter變量-->
<!--${parameter:?word}#為空報錯-->
<!--${parameter:+word}#不為空替換-->
a=1
echo ${a:-word} ? ?# 不為空不替換
echo ${b:=word} ? ?# b為空 此時把word賦值給b
echo ${b:?word} ? ?# b為空 ?報錯
echo ${a:+word} ? ?# a不為空 a被替換成word
<!--參數(shù)切片${parameter:offset}${parameter:offset:length}-->
<!--參數(shù)部分刪除-->
<!--${parameter%word}#最小限度從后面截取word-->
<!--${parameter%%word}#最大限度從后面截取word-->
<!--${parameter#word}#最小限度從前面截取word-->
<!--${parameter##word}#最大限度從前面截取word${var}-->
4.命令行替換
# `data`命令用戶獲得當(dāng)前時間 ?`command`完成命令的替換
# Shell 中有兩種方式可以完成命令替換,一種是反引號` `,一種是$()
#!/bin/bash
begin_time=`date` ? ?#開始時間,使用``替換
sleep 20s ? ? ? ? ? ?#休眠20秒
finish_time=$(date) ?#結(jié)束時間,使用$()替換
echo "Begin time: $begin_time"
echo "Finish time: $finish_time"
5.數(shù)字計(jì)算
echo $(()) 來包裹數(shù)學(xué)運(yùn)算
6.文件名展開
echo 正則匹配