Shell學習心得(一):變數

来源:https://www.cnblogs.com/ailiailan/archive/2019/04/22/10238074.html
-Advertisement-
Play Games

1、begin #! 是一個約定的標記,它告訴系統這個腳本需要什麼解釋器來執行,即使用哪一種 Shell。 echo 命令用於向視窗輸出文本。 2、運行shell的2種方式 2.1、作為可執行程式 將上面的代碼保存為 test.sh,並 cd 到相應目錄: 2.2、作為解釋器參數 這種運行方式是,直 ...


 1、begin

1 #!/bin/bash
2 echo "Hello World !"

#! 是一個約定的標記,它告訴系統這個腳本需要什麼解釋器來執行,即使用哪一種 Shell。

echo 命令用於向視窗輸出文本。

 

2、運行shell的2種方式

2.1、作為可執行程式

將上面的代碼保存為 test.sh,並 cd 到相應目錄:

1 chmod +x ./test.sh  #使腳本具有執行許可權
2 ./test.sh  #執行腳本

2.2、作為解釋器參數

這種運行方式是,直接運行解釋器,其參數就是 shell 腳本的文件名,如:

1 /bin/sh test.sh
2 /bin/php test.php

這種方式運行的腳本,不需要在第一行指定解釋器信息,寫了也沒用。

 

3、變數

3.1、定義變數

you_beautiful="xiaomengxin.com"

註意,變數名和等號之間不能有空格,這可能和所有編程語言都不一樣。同時,變數名的命名須遵循如下規則:

1命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭。
2中間不能有空格,可以使用下劃線(_)。
3、 不能使用標點符號。
4 、不能使用bash里的關鍵字(可用help命令查看保留關鍵字)。

 

 3.2、使用變數

使用一個定義過的變數,只要在變數名前面加美元符號即可,如:

your_name="jiayn"
echo $your_name
echo ${your_name}

變數名外面的花括弧是可選的,加不加都行,加花括弧是為了幫助解釋器識別變數的邊界。

已定義的變數,可以被重新定義,如:

1 your_name="minglu"
2 echo $your_name
3 your_name="wang"
4 echo $your_name

 

3.3、只讀變數

1 #!/bin/bash
2 readonly xiao_mengxin="真可愛"
3 echo ${xiao_mengxin}
4 xiao_mengxin="太醜了"
5 echo ${xiao_mengxin}

執行結果報錯:

1 真可愛
2 真可愛
3 /tmp/772600954/main.sh: line 4: xiao_mengxin: readonly variable

 

3.4、刪除變數

1 unset variable_name

變數被刪除後不能再次使用。unset 命令不能刪除只讀變數。

#!/bin/bash
xiao_mengxin="真可愛"
echo ${xiao_mengxin}
unset xiao_mengxin
echo ${xiao_mengxin}

執行結果:

真可愛

 

3.5、變數類型

運行shell時,會同時存在三種變數:

  •  局部變數     局部變數在腳本或命令中定義,僅在當前shell實例中有效,其他shell啟動的程式不能訪問局部變數。
  •  環境變數     所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常運行。必要的時候shell腳本也可以定義環境變數。
  •  shell變數    shell變數是由shell程式設置的特殊變數。shell變數中有一部分是環境變數,有一部分是局部變數,這些變數保證了shell的正常運行

 

4、字元串

4.1、字元串表示

字元串可以用單引號,也可以用雙引號,也可以不用引號

str='this is a string'

單引號字元串的限制:

  • 單引號里的任何字元都會原樣輸出,單引號字元串中的變數是無效的;
  • 單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符後也不行),但可成對出現,作為字元串拼接使用。
#!/bin/bash
xiao_mengxin='可愛'
echo ${xiao_mengxin}
str="我知道你的名字叫\"${xiao_mengxin}\"!\n"
echo -e $str

輸出:

可愛
我知道你的名字叫"可愛"!

雙引號的優點:

  • 雙引號里可以有變數
  • 雙引號里可以出現轉義字元

 

4.2、獲取字元串長度

1 #!/bin/bash
2 xiao_mengxin='可愛ne'
3 echo ${#xiao_mengxin}

輸出結果:8

 

4.2、提取子字元串

1 #!/bin/bash
2 xiao_mengxin='zen me zhe me ke ai ne'
3 echo ${xiao_mengxin:0:5}              #是不是看起來很熟悉,有沒有想到python裡面的切片

輸出結果:zen m

 

4.2、查找子字元串

1 #!/bin/bash
2 xiao_mengxin='zen me zhe me ke ai ne'
3 echo `expr index "$xiao_mengxin" km`

輸出結果:5

 

5、數組

bash支持一維數組(不支持多維數組),並且沒有限定數組的大小。

數組元素的下標由 0 開始編號。獲取數組中的元素要利用下標,下標可以是整數或算術表達式,其值應大於或等於 0。

5.1、定義數組

在 Shell 中,用括弧來表示數組,數組元素用"空格"符號分割開。定義數組的一般形式為:

array_name=(value0 value1 value2 value3)

 

5.2、讀取數組

${array_name[n]}
1 #!/bin/bash
2 array_name=("xiao_mengxin" "xiao_luming" "xiao_xishi" "xiao_yingji")
3 echo ${array_name[1]}

輸出結果:xiao_luming

使用 @ 符號或者*符號可以獲取數組中的所有元素,例如:

${array_name[@]}
${array_name[*]}

 

5.3、獲取數組的長度

獲取數組長度的方法與獲取字元串長度的方法相同,例如:

#!/bin/bash
array_name=("xiao_mengxin" "xiao_luming" "xiao_xishi" "xiao_yingji")
echo ${#array_name[@]}
# 或者
echo ${#array_name[*]}
# 取得數組單個元素的長度
echo ${#array_name[2]}

輸出結果:

4
4
10

 

6、註釋

以 # 開頭的行就是註釋,會被解釋器忽略。

多行註釋可以使用以下格式:

 1 #!/bin/bash
 2 
 3 :<<!
 4 array_name=("xiao_mengxin" "xiao_luming" "xiao_xishi" "xiao_yingji")
 5 echo ${#array_name[@]}
 6 # 或者
 7 echo ${#array_name[*]}
 8 # 取得數組單個元素的長度
 9 echo ${#array_name[2]}
10 !
11 
12 echo "qunaerle"

或者:

#!/bin/bash

:<<Esfdsfdsf
array_name=("xiao_mengxin" "xiao_luming" "xiao_xishi" "xiao_yingji")
echo ${#array_name[@]}
# 或者
echo ${#array_name[*]}
# 取得數組單個元素的長度
echo ${#array_name[2]}
Esfdsfdsf                         #一致即可

echo "qunaerle"

 


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

-Advertisement-
Play Games
更多相關文章
  • 開場一些題外話,今天登陸這個"小菜"的博客園,感觸頗多。"小菜"是我以前在QQ群裡面的網名,同時也申請了這個博客園賬戶,五年前的"小菜"在NET和C++某兩個群裡面非常的活躍,也非常熱心的幫助網友盡能力所及解決技術上的問題。依稀記得當時NET群裡面的"青菊、Allen、酷酷",C++群裡面的"夏老師 ...
  • OsharpNS框架入門教程 1. OsharpNS所需的基礎環境 ok 2. 使用OsharpNS項目模板創建項目 ok 3. 配置資料庫連接串並啟動項目 ok 4. OsharpNS.Swagger使用實例(登錄和授權) ok 5. Angular6的前端項目啟動 ok 6. 使用MySql作為 ...
  • rpm -ivh software_name安裝軟體 列印詳情rpm -q software_name查詢軟體是否安裝rpm -ql software_name查詢安裝目錄rpm -e software_name卸載軟體rpm -Uvh software_name升級軟體包rpm -ivh http ...
  • ls 作用:顯示目標列表,在Linux中是使用率較高的命令。ls命令的輸出信息可以進行彩色加亮顯示,以分區不同類型的文件。 參數: 實例: 顯示當前目錄下非隱藏文件的文件 顯示當前目錄下包括影藏文件在內的所有文件列表 輸出長格式 [root@iZuf61bne18a1bikx6z7bvZ /]# l ...
  • 需求: 自己有個功能變數名稱,原來直接扔在了伺服器的文件夾里(根據客服人員指導),自己玩了一遍nginx的安裝部署等操作之後,功能變數名稱的指向發生了改變,到了nginx成功的界面。 自己抱著極大的好奇心來配置nginx,已達到我能訪問到我的主頁的樣子,當然啦。做個功能變數名稱主頁對我來說最主要的作用就是學(裝)習(逼)。 ...
  • man 查看英文命令幫助 可以看作--help 拷貝目錄的命令cp -a 包含所有 ls -a 顯示所有文件包括隱藏文件 -ld ls -F 過濾目錄文件(給不同類型文件結尾加上不同的符號) -h顯示文件的k,M,G -i顯示文件的索引inode ls -l --time-style=long-is ...
  • 遇到了好幾個centos6.5,一直嘗試想提權。暫未成功,靶機內核:2.6.32-696.18.7.el6.x86_64。glibc版本:ldd (GNU libc) 2.12目前編譯過程中都發現很多坑。最開始編譯報錯,指定gcc路徑/usr/bin/gcc,指定std為c99,使用-std=c99... ...
  • 最近在學習Liunx,從裝虛擬機到敲命令出了一些問題,95%的問題從搜索引擎都可以找到。本來想寫個虛擬機安裝步驟結果忘記截圖了,不過沒事,網上一大把。寫寫博文勒就是記錄下自己的成長,雖然現在還是個小白。同時也讓一起在學習的小伙伴們一起交流學習。 1.開啟虛擬機出現了“內部錯誤”,截圖如下 解決方法: ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...