shell

命令歷史記憶功能
!number、!string、ctrl+r、!!
別名
alias、unalias

快捷鍵

<kbd>Ctrl</kbd>+<kbd>d</kbd>刪除光標(biāo)位置字符
ctrl+a 移動到命令行首
ctrl+e 移動到命令行尾
ctrl+l 清屏
ctrl+u 刪除光標(biāo)到行首,并復(fù)制到粘貼板、
ctrl+k 刪除光標(biāo)到行尾,并復(fù)制到粘貼板
ctrl+y 粘貼粘貼板內(nèi)容

shell前后臺作業(yè)控制

& 后臺執(zhí)行
nohup 不掛起任務(wù)
ctrl+c 終止當(dāng)前操作
ctrl+z 當(dāng)前任務(wù)到后臺
bg % 1 將任務(wù)到后臺
fg % 1 將任務(wù)到前臺
kill % 3 關(guān)閉任務(wù)
screen、
jobs 查看任務(wù)

tee 將數(shù)據(jù)重定向到文件

admin@DESKTOP-H0TURO1 ~/script
$ ls | tee a | cat
spliter

admin@DESKTOP-H0TURO1 ~/script
$ cat a
spliter

shell通配符

  • 匹配任意多個字符
    ? 匹配任意單個字符
    [] 匹配括號中一個字符,[^a-z]取反
    () 子shell中執(zhí)行括號內(nèi)命令
    {} 集合
    \ 轉(zhuǎn)義
  • 子shell中執(zhí)行
    ~/script.sh
    bash script.sh
  • 當(dāng)前shell中執(zhí)行
    source script.sh
    . script.sh
# a.sh
##!/bin/bash
##echo $ID
[admin@DESKTOP-H0TURO1]$ . a.sh
20699
[admin@DESKTOP-H0TURO1]$ ./a.sh

[admin@DESKTOP-H0TURO1]$ source a.sh
20699
[admin@DESKTOP-H0TURO1]$ bash a.sh

[admin@DESKTOP-H0TURO1]$

shell變量

  • 自定義變量:變量名=變量值
    變量引用:$變量名、${變量名}
    read:讀取鍵盤輸入
  • 位置變量
    $1第一個入?yún)?/li>
  • 環(huán)境變量
    export 修飾
  • 預(yù)定義變量
    • $?:上個命令的返回值 0表示成功
    • $!:上一個后臺進(jìn)程PID
    • $$:當(dāng)前進(jìn)程PID
    • $0:腳本名
    • $*、$@:所有的參數(shù)
    • $#:參數(shù)個數(shù)
  • 只讀變量
    readonly id=2
  • 刪除變量
    unset id
  • 命令替換
    $()、`` 命令替換,先執(zhí)行命令再賦值
    num=$(date +%F)
    num=`date +%F`
    單引號中變量不起作用
    雙引號中變量起作用
#!/bin/bash
id=12
echo $id,${id}

read -p "please input a number:" num
echo "input number is: $num"

echo "first variable is \$1: $1"
echo "script name is \$0: `basename $0` and `dirname $0`"
echo "last command return \$?: $?"
echo "parameter num is \$#: $#"
echo "all parameter is \$@: $@"

$ ./variable_01.sh lucy lilly
12,12
please input a number:2
input number is: 2
first variable is $1: lucy
script name is $0: variable_01.sh and .
last command return $?: 0
parameter num is $#: 2
all parameter is $@: lucy lilly

變量運(yùn)算

expr 1+3
$(())
$[]
let num=1+1

  • 算術(shù)運(yùn)算符
    +、-、\*/、%、==、!=
  • 關(guān)系運(yùn)算符
    -ge、-gt、-eq、-ne、-le、-lt
  • 布爾運(yùn)算符
    !、-a、-o
  • 字符串運(yùn)算符
    =、!=
  • 文件測試運(yùn)算符
    -f、-d
#!/bin/bash
a=10
b=5

var=`expr $a + $b`
echo "a+b=$var"

var=$((a - b))
echo "a-b=$var"

var=$[a * b]
echo "a*b=$var"

var=$[a / b]
echo "a/b=$var"
 
echo "a=$a,b=$b"
[ $a -le $b ] && echo "yes" || echo "no"
test $a -ge $b && echo "yes" || echo "no"

[ -f $0 ] && echo "yes" || echo "no"

變量內(nèi)容刪除和替換

${url#s}從前往后,最短匹配
${url##s}從前往后,最長匹配
${url%s}從后往前

if

if [ expression ] then echo "a" elif [ expression2 ] then echo "b" else echo "c" fi
test
[ ]
[[ ]]支持正則 =~

#!/bin/bash
read -p "please input first num " a
read -p "please input second num " b

if [ $a -gt $b ]
then
        echo "$a greater then $b"
elif [ $a -lt $b ]
then
        echo "$a less then $b"

else [ $a -eq $b ]
        echo "$a equals $b"
fi

seq序列命令

case

#!/bin/bash

read -p "please input a number between 1 to 4 " num

case $num in
        1)
                echo "you select 1"
                ;;
        2)
                echo "you select 2"
                ;;
        3)
                echo "you select 3"
                ;;
        4)
                echo "you select 4"
                ;;
        *)
                echo "err"
                ;;
esac

trap捕捉信號,執(zhí)行命令

while

#!/bin/bash
a=1
while [ $a -lt 10 ]
do
        echo $a
        let a++
done

for

for ((i=0;i<10;i++))
do
        echo "loop $i"
done

for v in `seq 10`
do
        echo "loop2 $v"
done

for a in "a" "b" "c"
do
        echo $a
done

profile、bashrc

  • 系統(tǒng)級
    1 /etc/profile
    2 /etc/bashrc
  • 用戶級
    3 ~/.bash_profile
    4 ~/.bash_rc
    5 ~/.bash_logout
    6 ~/.bash_history

登出時執(zhí)行5、6
login shell
登錄時執(zhí)行1、2、3、4
su - alice
nologin shell
登錄時執(zhí)行2、4
su alice

函數(shù)

函數(shù)名(){}
function 函數(shù)名{}
函數(shù)的返回值是最后一條命令的狀態(tài)碼

shell默認(rèn)返回值最大255

輸入輸出重定向

>輸出重定向
>>拼接輸出
<輸入重定向
<<tag開始標(biāo)記tag和結(jié)束標(biāo)記tag之間的內(nèi)容作為輸入
> /dev/null輸出屏蔽

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容