博客 / 詳情

返回

嵌入式 - shell 常用語法簡單總結

shell 常用語法

初步使用 Linux中工具鏈的配置 變量 參數 條件判斷 循環 輸入讀取 函數 正則表達式 文本處理工具

bash和shell的關係:shell是一個概念,bash是這個概念的一個具體實現。

初步使用

#!bin/bash

echo "Hello world!"
echo

# shell
vim helloworld.sh
chmod u+x helloworld.sh

# 在當前bash運行
. helloworld.sh
source helloworld.sh

# 在子bash中運行,無法修改當前shell的變量
./helloworld.sh

Linux中工具鏈的配置

​ ~/.bashrc用於定義當前用户的Bash shell 環境參數。每次打開終端時該文件就會執行。在~/.bashrc中添加

export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/ayuan/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin
  • 別名
alias ll='ls -l'  # 輸入 ll 等效於 ls -l

變量

# 常用系統變量
echo $HOME; echo $PWD; echo $SHELL; echo $USER

# 定義變量時,=號前後不能有空格
# 全局變量定義,上層shell定義的全局變量下層可以查看修改,但是對上層沒有影響
export ARM=arm

shell腳本中單引號和雙引號的區別

echo "hello $name" # hello world
echo 'hello $name' # hello $name

參數

# 傳入的參數個數
$#
# 傳入的參數分別為
$0; $1; $2;

# 傳入的所有參數,整體和分開
$*; $@;

# 最後一條命令的返回狀態
$?

# 當前shell的進程ID
$$
  • 運算
A=$[1+2*3]

條件判斷

if [ $1 -le $b ] 
then
	echo
elif
	echo
fi

case $1 in
"1")
	echo
;;
"2")
	echo
;;
*)
	echo
;;
esac

# 常用判斷符號
-eq -lt -le -gt -ge -ne
-r -w -x
-e # 文件存在
-f # file
-d # dir
# 字符串比較
= !=
-z # 空串
-n # 非空串
# 邏輯
-a -o !

替換運算符

  • ${var_name:-def_Val}
    如果變量var_name存在且為非null,返回該變量的值,否則返回默認值def-Val
    注意var_name與:之間沒有空格,:與-之間可以有空格。主要用途,如果變量未定義,則用默認值。
  • ${var_name:=val}
    如果變量var_name存在且為非null,返回該變量的值,否則,把val的值賦給變量var_name,並返回var_name的值val。
    注意var_name與:之間沒有空格,:與=之間也不能有空格。
  • ${var_name:?message}
    如果變量var_name存在且為非null,返回該變量的值,否則返回該變量的名字var_name:提示信息meesage,並退出當前命令或腳本。
    注意 var_name: 之間沒有空格,:? 之間也不能有空格。
  • ${var_name:+val}
    如果變量var_name存在且為非null,返回val,否則返回null。
    注意 var_name: 之間沒有空格,:+ 之間也不能有空格。
  • ${#val_name}
    返回變量長度。
  • $(())
    算術運算操作。
  • $((var1 opr var2))
    例如: $((5+1)) 只能是 + - * /() 運算符,並且只能做整數運算。
  • $()
    命令代換,類似於反引號(`), 例如:echo $(date)

循環

for i in $@
do
	echo $i
done
#
for((i=1;i<=100;i++))
do
	sum=$[$sum+$i]
done

while [ $i -le 100 ]
do
	sum=$[$sum+$i]
	i=$[$i+1]
done

輸入讀取

read -t 5 -p "Enter name: " NN
echo NN

函數

# 系統函數
basename /home/atguigu/banzhang.txt
# banzhang.txt
basename /home/atguigu/banzhang.txt .txt
# banzhang

dirname /home/atguigu/banzhang.txt
# /home/atguigu

# 自定義函數
function sum()
{
    s=0
    s=$[$1+$2]
    echo "$s"
}

正則表達式

# 開頭
^
# 結尾
$
# 連續多個字符
a*
# 字符區間
[0-9]* [a-z]*
# 轉義
\$

文本處理工具

# cut 提取列。-d分隔符;-f第幾列
cut -d " " -f 1 file.txt
# awk 提取元素,提取 正則搜索 提取出的所有行的 以 : 分隔的 第七個 元素。
awk -F : '/正則搜索/{print $7}'
user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.