bash筆記

前言

有時候閱讀一些腳本語言的時候總是遇到很多問題,並且學了幾次,也沒學出太好的效果,這次基本強調語法。主要爲了可以閱讀懂大部分bash腳本爲目的的思路,整理出自己的思路,好好總結一下bash的主要奇怪的語法,希望以後可以不用在這裏糾結。

正文

這裏主要順序還是按照知識要點來記錄,主要是用法,和一些例子,不會存在特別多的理論講解,

1. io重定向—— >

這裏指的是類似java中的io流的概念,可以讓固定的指令產生的內容作爲輸入,比如

ls > test.txt;
ls >> test1.txt;

這是將當前目錄內容直接生成一個test.tex文件,如果是`>>,這個是將值連接到文件的末尾。
當我們重定向一個特殊變量時候,比如:

cat /dev/null > test.txt
: > test.txt    #:這個代表啥也不做指令,所以爲空,效果同上。

這裏將空內容導入test.txt重新寫入文件,當然清楚了文件內容,

scriptname >filename 重定向腳本的輸出到文件中.覆蓋文件原有內容.
command &>filename 重定向stdout 和stderr 到文件中
command >&2 重定向command 的stdout 到stderr
scriptname >>filename 重定向腳本的輸出到文件中.添加到文件尾端,如果沒有文件,則創建這個文件.

<< 重定向,用在”here document”
<<< 重定向,用在”here string”

2. 註釋

#開頭的內容,指導行結束。
例如:

echo "hello world"  #這是一行註釋;

#功能很強大,我這裏暫時舉幾個例子,

echo ${PATH#*:} # 參數替換,不是一個註釋
echo $(( 2#101011 )) # 數制轉換,不是一個註釋
echo "$#" #輸出所有參數,

3. 變量

這個腳本語言當然不含數據類型了,直接聲明,例如:

dir=/home/myuser/project
cd $dir

這裏是其他關於let的用法暫時省略,

4. 判斷

? 這個可以用來判斷,(())這個可以用作c語言風格的切換,當?放在裏面,可以用作三元操作,
[] 這個也是測試,
[[]] 也是
這個是相當複雜,可是這裏主要記住一些test的參數,這裏比較複雜,就不詳細介紹,主要和if連用。

5. {}

這個可以擴展,比如:

cat {file1,file2,file3} > combined_file
# 把file1,file2,file3 連接在一起,並且重定向到combined_file 中.
cp file22.{txt,backup}
# 拷貝"file22.txt""file22.backup"中

echo {file1,file2}\ :{\ A," B",' C'}
file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C

可以和io重定向連接使用

File = ~/test.txt
{
read line1
read line2
} < $File

管道 |

| 管道.分析前邊命令的輸出,並將輸出作爲後邊命令的輸入.這是一種產生命令鏈的好方法.

echo ls -l | sh
cat *.lst | sort | uniq
# 合併和排序所有的".lst"文件,然後刪除所有重複的行.

後臺控制

& 例如

for i in 1 2 3 4 5 6 7 8 9 10 #第一個循環
do
echo -n "$i"
done&

連續操作

(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)

# 更優雅的寫法應該是
# cd source/directory
# tar cf - . | (cd ../dest/directory; tar xpvf -)
#
# 當然也可以這麼寫:
# cp -a /source/directory/* /dest/directory
# 或者:
# cp -a /source/directory/* /source/directory/.[^.]*/dest/directory
# 如果在/source/directory 中有隱藏文件的話.

這裏用的是與。先執行前版部分,後開始執行

後記

這裏基本我可以閱讀一部分代碼了,感覺流程不是太大問題,另外函數這裏暫時省略,以後補充,這裏有挺多的內容,以後完善。

發佈了66 篇原創文章 · 獲贊 29 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章