Shell入門

来源:http://www.cnblogs.com/wswang/archive/2016/11/21/6086286.html
-Advertisement-
Play Games

前言 日常用Python多一些,不過很多時候shell腳本更簡單實用一些,所以有必要熟悉一下shell腳本。當然shell有他特定的一些場景,比方說我曾經改過一個vpn斷線自動重連的 "腳本" ,簡單實用。 另: 本文比較簡單,算是入門簡述,類似於30分鐘入門的東西,想詳細看的可以去搜其他文章,很多 ...


前言

日常用Python多一些,不過很多時候shell腳本更簡單實用一些,所以有必要熟悉一下shell腳本。當然shell有他特定的一些場景,比方說我曾經改過一個vpn斷線自動重連的腳本,簡單實用。

另:本文比較簡單,算是入門簡述,類似於30分鐘入門的東西,想詳細看的可以去搜其他文章,很多~

註釋

這個比較簡單,和很多語言都一樣,#後面的就是註釋,代表本行是註釋,執行的時候會被忽略,沒有多行註釋。

註:

  1. 如果在開發過程中,遇到大段的代碼需要臨時註釋起來,過一會兒又取消註釋,怎麼辦呢?每一行加個#符號太費力了,可以把這一段要註釋的代碼用一對花括弧括起來,定義成一個函數,沒有地方調用這個函數,這塊代碼就不會執行,達到了和註釋一樣的效果。
  2. vim里有更簡單的操作 - -

變數

變數的定義

  1. 首個字元必須為字母(a-z,A-Z)。
  2. 中間不能有空格,可以使用下劃線(_)。
  3. 不能使用標點符號。
  4. 不能使用bash里的關鍵字(可用help命令查看保留關鍵字)。
  5. 使用等號賦值,變數名和等號之間不能有空格

如:

name="wang"

使用變數

變數名前面加$即可,同時推薦給變數名加花括弧(可選,部分場景下必選),例如(註意最後兩行,如果不加花括弧會導致系統認為firstNamewang是一個變數):

echo $name

read firstName

echo "firstName=$firstName"
echo "firstNmae=${firstName}"

echo "name=$fistNamewang"
echo "name=${firstName}Wang"

其他操作

  1. 只讀變數,變數前加readonly,如readonly name,此操作後不得再重新賦值
  2. 刪除變數,unset name,此語句後不得再使用此變數
  3. 讀取輸入,見上面使用變數處read firstName,此處即為獲取標準輸入
  4. 一些轉義字元,使用echo -e xxx可以轉義成功

特殊變數

變數名 含義
$0 當前腳本的文件名
$n 傳遞給腳本或函數的參數。n 是一個數字,表示第幾個參數。例如,第一個參數是$1,第二個參數是$2。
$# 傳遞給腳本或函數的參數個數。
$* 傳遞給腳本或函數的所有參數。
$@ 傳遞給腳本或函數的所有參數。被雙引號(" ")包含時,與 $* 稍有不同
$? 上個命令的退出狀態,或函數的返回值。
$$ 當前Shell進程ID。對於 Shell 腳本,就是這些腳本所在的進程ID。

PS: $* 和 $@ 都表示傳遞給函數或腳本的所有參數,不被雙引號(" ")包含時,都以"$1" "$2" … "$n" 的形式輸出所有參數。
但是當它們被雙引號(" ")包含時,"$*" 會將所有的參數作為一個整體,以"$1 $2 … $n"的形式輸出所有參數;"$@" 會將各個參數分開,以"$1" "$2" … "$n" 的形式輸出所有參數。

字元串

單引號,雙引號

單引號里字元串原樣輸出,也就是說轉義和變數名都是無效的,同時單引號里不能有單引號,雙引號則不會。所以推薦雙引號就可以了。

獲取長度

string='abcd'

echo ${#string} #輸出 4

數組

定義

小括弧代表數組,使用空格來間隔,不支持多維數據,下標從0開始,如:

person=(name1 name2 name3)

persons = (
name1
name2
name3
)

people[0]='xxx'
people[1]='xxxx'

獲取長度

獲取長度,與獲取字元串長度一樣:

length=${#array_name[@]}

length=${#array_name[*]}

lengthn=${#array_name[n]}

echo命令

一般的使用沒什麼可說的,說幾個特殊的:

  1. 顯示結果重定向到文件,echo "xxx" > file_name
  2. 執行命令,date

if else

if [ expression ]
then
   Statement(s) to be executed if expression is true
fi
if [ expression ]
then
   Statement(s) to be executed if expression is true
else
   Statement(s) to be executed if expression is not true
fi
if [ expression 1 ]
then
   Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
   Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
   Statement(s) to be executed if expression 3 is true
else
   Statement(s) to be executed if no expression is true
fi

for

for loop in 1 2 3 4 5
do
    echo "The value is: $loop"
done

while

while command
do
   Statement(s) to be executed if command is true
done

跳出迴圈

break 和 continue,和c語言中的用法一樣

函數

定義函數

有兩種定義方式,如下:

function_name () {
    list of commands
    [ return value ]
}
function function_name () {
    list of commands
    [ return value ]
}

調用函數

只寫函數名字就可以,不用寫括弧。

參數

在Shell中,調用函數時可以向其傳遞參數。在函數體內部,通過 $n 的形式來獲取參數的值,例如,$1表示第一個參數,$2表示第二個參數…

文件包含

. filename (點和名字之間有空格)

或者

source filename

ref

http://c.biancheng.net/cpp/shell/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • DBMS_NETWORK_ACL_ADMIN學習 轉載 http://blog.sina.com.cn/s/blog_4f925fc30102e2se.html 標簽: oracle it 分類: 資料庫 http://docs.oracle.com/cd/B28359_01/appdev.111/ ...
  • 一、資料庫的簡介 什麼是資料庫? 數據的倉庫,如:在atm的實例中我們創建一個db目錄稱之為資料庫 什麼是 MySQL、Oracle、SQLite、Access、MS SQL Server等 ? 他們是資料庫軟體,主要功能為兩部分:1、講數據保存到記憶體或者文件。2、接受特定的命令對數據進行操作 什麼 ...
  • 使用PlateSpin複製出來的一資料庫伺服器(Oracle 10g)在啟動資料庫實例時遇到“ORA-00600: internal error code, arguments: [4194].....”錯誤,實例在啟動後,會自然Down掉。具體情況如下所示: Successfully online... ...
  • Windows環境配置MySQL集群 一、Cluster環境搭建 1、mysql Cluster(MySQL Cluster 7.5.4)文件下載地址:http://dev.mysql.com/downloads/cluster/ 2、準備三台伺服器(虛擬機,本人使用的是Windows Server ...
  • 1. 索引(Index) 索引是快速的定位和查找數據。索引分為: 聚集索引:唯一,預設主鍵,一般選取比較連貫的欄位,聚集索引是物理排序。 非聚集索引: 並沒有把數據物理排序,只是多了一個索引頁(包括索引項+存儲位置row number) a. 新建“非聚集索引” b. 選擇“專業”創建非聚集性索引。 ...
  • Hey,大家好!我是CrazyCatJack。今天我來說幾個在嵌入式開發中常用的C語言技巧吧。也許你曾經用過,也許你只是見到過但是沒有深入理解。那麼今天好好補充下吧^_^ 1.指向函數的指針 指針不光能指向變數、字元串、數組,還能夠指向函數。在C語言中允許將函數的入口地址賦值給指針。這樣就可以通過指 ...
  • 轉自:http://www.cnblogs.com/phoebus0501/archive/2010/12/14/1906144.html 1.確保RHEL5中已經安裝了yum [root@lvs-master ~]# rpm -qa |grep yumyum-metadata-parser-1.1 ...
  • 操作系統API: 1、API是一些函數,這些函數是由linux系統提供支持的,由應用層程式來使用,應用層程式通過調用API來調用操作系統中的各種功能,來幹活 文件操作的一般步驟: 1、在linux系統中要操作一個文件,一般是先open打開一個文件,得到一個文件描述符,然後對文件進行讀寫操作(或其他操 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...