Bash入門

Bash簡介:

Bash(GNU Bourne-Again Shell)是一個為GNU計劃編寫的Unix shell,它是許多Linux平臺默認使用的shell。

shell是一個命令解釋器,是介于操作系統內核與用戶之間的一個絕緣層。準確地說,它也是能力很強的計算機語言,被稱為解釋性語言或腳本語言。

不管學習哪種語言,我們程序猿編寫的第一個程序就是:hello world,shell腳本也不例外。

vim hello.sh

這里寫圖片描述

運行shell腳本的方式:
sh hello.sh
bash hello.sh
或者可以給其添加可執行權限:
chmod u+x hello.sh
./hello.sh

下面來描述一個小的腳本程序(用于清除/var/log下的log文件):

vim cleanlogs.sh

/dev/null 是指內容為空

這里寫圖片描述

運行腳本后,就可以清除文件啦。

可是,原因是什么呢,,為什么這樣就可以清除文件了呢。首先,是因為 /dev/null 是指內容為空,將空的內容寫進messages和wtmp中,就會使文件的內容全部為空,這樣就清空了。

入門Bash:

1. Bash中#是代表注釋的意思,(如果需要用到’#’字符的話,需要轉義為\#哦)#!用于解釋當前腳本的解釋器,這里用的是bash,所以用全路徑/bin/bash。

2. 在shell腳本中是用;作為命令分隔符,一行中如果有分號,則還可以寫其他命令。

我們還是以一個例子來說明吧:

這里寫圖片描述

這個例子是檢測是否有ttt.sh這個文件,如果有的話,輸出文件存在,然后將其拷貝到ttt.sh.bak中,否則輸出文件不存在,然后創建一個ttt.sh的文件。最后輸出文件測試完成。(這里的條件分支,后續會具體講到哦~)

執行腳本后sh hello.sh,結果為:

這里寫圖片描述

3. 我們用雙分號”;;”來終止case命令,相當于是C語言中的break。

這里寫圖片描述

運行結果為:

123

4. 關于引號,主要有雙引號和單引號

雙引號:對引號中的字符串中的大部分特殊字符的解釋進行阻止

單引號:對引號中的字符串中的大部分特殊字符的解釋進行阻止

這里寫圖片描述

對于雙引號來說,它會將雙引號中的值當做是一個變量,而對于單引號,它會看成是一個字符串

5.關于斜線,有斜線,反斜線,一般情況下,斜線(/)看做是根目錄,或者是路徑分隔符,注意這里,一個斜線(/)和多個斜線()是一樣的。那么,反斜線(\)的作用呢,是用來轉義的,也可以轉義單引號和雙引號的內容,這里就會將單引號和雙引號區分開來而不用被解釋成特殊的字符。

6. 關于反引號,“將優先執行反引號中的內容;舉個例子吧:

這里寫圖片描述

這里,我們將先執行mkdir back,創建好back目錄后,再將test.sh拷貝到back目錄下。

7.關于冒號,表示空,是shell的一個內建命令,其退出碼為0。和C語言中的true類似。

這里寫圖片描述

這樣的話,結果就會是一個永無止境的死循環了。一直輸出endless loop

當然,:也可以什么都不做,當做一個占位符,如下例子:

這里寫圖片描述

結果為:

這里寫圖片描述

:還有另外一個作用是用于清空文件中的內容

:> test.sh
這時,就把test.sh中的內容清空了,文件權限等并不會受影響哦

:還用來做分隔符:

echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/games

8.關于問號,我們通常用在三目運算符中

9.關于$符號,我們用在變量替換中

這里寫圖片描述

結果為:

這里寫圖片描述

$還用于命令替換,

cd $(echo back)
pwd

這里寫圖片描述

10. 關于小括號,代表是子shell中創建的內容,所以在父腳本中不可見。如下:

這里寫圖片描述

結果為:

這里寫圖片描述

這個倒是和C語言中的作用域{ }有些類似。

11. 初始化數組,和C語言中的數組類似,只是這里是用空格將數據分隔開。

這里寫圖片描述

結果為:

這里寫圖片描述

12.關于大括號{ },在大括號中不允許有空白哦。可對于文件進行操作,其次可進行代碼塊的區分,也可以當做塊域

這里寫圖片描述

13.關于中括號[ ],是條件測試的塊域。之前寫例子的時候也有所涉及,就不多說了。[ ]還用來表示數組的元素,例如arr[1];取元素的編號

14.尖括號>,>>,是重定向。前面也涉及到了。

test.sh > filename 重定向test.sh的輸出到文件 filename 中。如果 filename 存在的話,那么將會被覆蓋。

test.sh &> filename 重定向 test.sh 的 stdout(標準輸出)和 stderr(標準錯誤)到 filename 中。

test.sh >&2 重定向 test.sh 的 stdout 到 stderr 中。

test.sh >> filename 把 test.sh 的輸出追加到文件 filename 中。如果filename 不存在的話,將會被創建。

15.關于管道:|,這個之后會詳細講解

16.破折號,’-‘用于顯示選項參數時經常會用到。

ls -l
if [ 5 -eq 0] then

17.波浪號:~,表示主工作目錄

今天介紹的這些都是簡單基本的bash的常用字符,只是一個小小的鋪墊吧,之后會詳細寫一下bash編程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/382731.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/382731.shtml
英文地址,請注明出處:http://en.pswp.cn/news/382731.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu 設置分辨率 親測可用 轉載的

網上試了很多方法, 這家管用 https://blog.csdn.net/qq_35661436/article/details/72802040

線程之售票系統pthread_mutex,_lock,_unlock

先看一下這篇文章 https://blog.csdn.net/csdn_kou/article/details/81148268 四個人同時買票票,引出線程 #include "head.h" int ticket 100; void * route(void *arg) {char *id (char *)arg;while(1){if(ticket>0){usleep(1000);printf("…

Bash基本語法

1. 變量賦值 a375 hello$a 這里需要注意的是,等號兩邊不能有空格 還有一個例子是這樣的 例1: 結果為: 關于上述,主要有如下幾點: $hello和${hello}是一樣的,在bash中如果遇到空格,tab鍵時&a…

windows下 , py運用了 進程池, 將py打包成exe,出現錯誤的 解決思路之一

在windows上,用pycharm開發了一個小項目, 用到了from concurrent.futures import ProcessPoolExecutor 本來在pycharm里面,運行的好好地, 可是打包成exe的時候, 發現 當程序運行到 進程池執行任務的時候,會創建一個新的界面, 猜測應該是創建了一個新的進程, 百度后,發現在 程序…

關于fd和fp(fd:file descirptor fp:file pointor)

通常,我們在輸入數據或輸出數據的設備為鍵盤或者顯示器。當然,我們比較熟悉的輸入輸出,可能就是對于文件的操作,還有直接從終端輸出,顯示到顯示器上。在C語言中,我們使用fopen,fclose,fread,fwrite對文件進…

粗談pragma once與 #ifndef的區別

#ifnde不受編譯器的任何限制; #pragma once不受一些較老的編譯器支持,兼容性不夠好

在mac os10.13系統下 ,將py文件打包成可執行程序后, 里面的路徑出現的問題

本來 用命令行運行py文件, 代碼里面 獲取當前路徑的 語句 例如: os.getcwd() os.path.abspath(__file__) os.path.realpath(__file__)都可以獲取到當前文件的路徑, 但是打包成 可執行程序后, 統統不對了, 變成了 類似 /usr/xxx 的路徑 https://stackoverflow.com/questions/50…

[linux]wait詳解

wait:進程等待 主要有兩種等待方式:阻塞式等待和非阻塞式等待 阻塞式等待:如果子進程正在運行,父進程將會一直等待著子進程運行結束,并且自己什么事都不干 非阻塞式等待:如果子進程正在運行,…

centos 使vim支持+python和+python3

本文為了給ycm服務,不單獨存在。 查看是否支持python vim --version | grep python然后 下載vim8源碼: git clone https://github.com/vim/vim.git 1 進行編譯安裝,添加python3和python2.7的支持: 進入下載的vim的源碼文件夾中&#x…

ffmpeg的學習-00

命令行 大體樣式 ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url} ...有道翻譯的 以后仔細回看 2.描述 ffmpeg是一個非常快的視頻和音頻轉換器,也可以從一個實時音頻/視頻源抓取。它還可以轉換之間的任意采樣…

[Linux]消息隊列

我們知道進程間通信的方法有多種,主要有管道,消息隊列,信號量,共享內存,socket等。之前介紹過管道,今天再介紹一個新的概念–消息隊列。 消息隊列:將一個進程到另一個進程之間發送數據塊的方式…

詳解centos7 YCM YouCompleteMe自動補全安裝,親測成功

文章經重新排版轉移至以下鏈接 https://blog.csdn.net/csdn_kou/article/details/84633663

python 異步與io

文檔地址: https://docs.python.org/zh-cn/3/library/asyncio.html 以后再記錄學習筆記 待續。。。

tornado 學習注意事項--00

設置url匹配的時候, (r/(.*), AMStaticFileHandler,dict(pathos.path.join(current_path, html), default_filenameindex.html))像這種語句要放到最后,因為放到前面的話, 后面的就無法匹配!

C++關鍵字速查手冊

[TOC] https://blog.csdn.net/csdn_kou/article/details/81113215 C98關鍵字 C11 關鍵字共73個 alignas alignof用于獲取取指定表達式指定的(類似sizeof,可以直接是類型名)的對齊(alignment)。alignas用于聲明時指定對齊類似于現有的類型…

[Linux]信號

Linux下的信號是一個什么概念呢。我們在現實生活中也遇到過信號之類的。比如紅綠信號燈,班主任叫你去辦公室并且臉色不好,諸如此類的都會給你一個信號。讓你辨別事情的發生。同樣,Linux下也有許多的信號,讓你執行相應的操作。比如…

怎么用VLC播放器將m3u8鏈接視頻下載到本地

轉載 https://blog.csdn.net/saddyyun/article/details/85245135

【1】C++面試題函數引用重載宏命名空間

函數重載的條件 ? 同一個名字 ? 函數名字相同 ? 參數列表不同 ? 同一個作用域 為什么c支持函數重載而c不支持? c函數名字的修飾規則不一樣。c編譯器對函數修飾規則把int的參數列表形式加了進來,從而保證底層使用不同 cAdd(int a,int b)_AddcA…

[數據結構]Map和Set

說起map和set,想必我們都學過紅黑樹了吧,map和set就是紅黑樹的一個應用領域。它的底層就是由紅黑樹來實現的。下面簡單說一下map和set的使用吧。 首先,有一個栗子是這樣的,讓我們統計出每種水果出現的次數。 我們會想到怎么解決…

js獲取Json對象的長度

有兩種Json形式: 第一種: var json1 {"data":[{"name":"zs","age":"10"}]};對于這種格式的json數據,如果想獲取data的長度,就可以用以下這種方式: var length …