01 shell編程規範與變數

来源:https://www.cnblogs.com/tzlsj/archive/2018/06/06/9145018.html
-Advertisement-
Play Games

前言: 大家對shell腳本應該都不算陌生了,如果突然問你什麼是shell腳本?是乾什麼用的?由什麼組成以及怎麼使用?變數的概念是什麼?作用範圍是什麼?變數間的算術運算怎麼表示?你能很容易答出來嗎 本文整理自博主當年的學習筆記,若有疏漏歡迎指正! Shell編程規範與變數 學習目標: 掌握shell ...


前言:

大家對shell腳本應該都不算陌生了,如果突然問你什麼是shell腳本?是乾什麼用的?由什麼組成以及怎麼使用?變數的概念是什麼?作用範圍是什麼?變數間的算術運算怎麼表示?你能很容易答出來嗎

本文整理自博主當年的學習筆記,若有疏漏歡迎指正!

Shell編程規範與變數

學習目標:

掌握shell腳本編程規範

掌握管道,重定向,變數

目錄結構:

 

 

 

Shell腳本的概念

  1. 將要執行的命令按順序保存到一個文本文件
  2. 給文件可執行許可權,便可運行。
  3. 可以結合各種shell控制語句以便完成更複雜的操作
  4. 腳本文件一般以.sh結尾,執行腳本的命令是sh

 

Shell腳本應用場景

  1. 重覆性操作
  2. 批量事物處理
  3. 自動化運維
  4. 服務運行狀態監控
  5. 定時任務執行
  6. ……

 

Shell腳本的組成

1、 腳本聲明 #!/bin/bash一般是這樣的

2、 註釋信息 以#開頭註釋腳本大概情況

3、 可執行語句 就是指正文,命令的疊加

 

編寫shell腳本

[root@poll ~]# vi a.sh   //編輯腳本文件,腳本文件一般都是以.sh結尾的

#!/bin/bash   //聲明這是·一個腳本

#This is my first shell-script   //註釋一般用來記錄腳本的功能

#2018-03-16   //註釋 記錄腳本時間

cd /boot   //切換到/boot目錄下

echo "當前目錄位於:"   //顯示雙引號內的內容

pwd   //顯示當前目錄

echo "其中以vml開頭的文件包括:"   //顯示雙引號內的內容

ls -lh vml*   //執行命令

 

註意:有交互用read -p 沒有用echo

Shell腳本的執行方式

1、 絕對路徑

2、 相對路徑

3、 sh腳本

4、 source腳本

shell腳本變數揭秘

變數概念與分類

變數的概念:

1、 變數用來存放系統或用戶需要使用的特定參數或者值

2、 變數的的值可以根據用戶設定或者系統環境的變化面相應變化

3、 在shell腳本中使用命令可以使腳本更加靈活,適應性更強

 

變數的分類:

 自定義變數:由用戶自己定義,修改和使用

 環境變數:由系統維護,用於設定系統環境

 位置變數:通過命令行給腳本程式傳遞參數

 預定義變數:bash中內置的一種變數,不能直接修改

 

變數的定義與輸出

定義一個新的變數

格式:變數名=變數值

變數名以字母或者下劃線開頭

區分大小寫

 

賦值可使用引號

雙引號:允許通過$符號引用其他變數值

單引號:禁止引用其他變數值,$視為普通字元

反撇號``或$():命令替換,提取命令的執行結果

 

輸入輸出

輸入格式:read [-p “提示信息”] 變數名

輸出格式:echo $變數名

 

變數作用範圍

l  ’預設情況下,新定義的變數只在當前shell環境中有效,因此稱為局部變數

l  當進入子程式或新的子shell環境時,局部變數無法再使用

l  為了使用戶定義的變數在所有的子shell環境中能夠繼續使用,減少重覆設置工作,可以通過內部命令export將制定的變數導出為“全局變數”

格式1:export 變數名…

格式2:export 變數名=變數值 …

兩種格式可以混合使用

 

變數的算術運算

l  變數的數值運算多用於腳本程式的過程式控制制

l  只能進行簡單得整數運算,不支持小數運算

l  整數值得運算主要通過內部命令expr進行

l  格式

expr 變數1 運算符 變數2 [運算符 變數3]

l  +:加法運算

l  -:減法運算

l  \* :乘法運算,註意不能僅使用“*”符號,否則將被當成文件通配符

l  /:除法運算

l  %:求模運算,又稱為取餘運算,用來計算數值相除後的餘數

 

實例:

[root@poll ~]# x=35

[root@poll ~]# y=16

[root@poll ~]# expr $x + $y

51

[root@poll ~]# expr $x - $y

19

[root@poll ~]# expr $x \* $y

560

[root@poll ~]# expr $x / $y

2

[root@poll ~]# expr $x % $y

 

預定義變數

l  預定義變數是由bash程式預先定義好的一類特殊變數,用戶只能使用預定義變數,而不能創建新的預定義變數,也不能直接為預定義變數賦值

l  預定義變數使用“$”符號和另一個符號組合表示

l  $*  $@

保存了腳本要處理的所有參數

l  $0

保存了腳本的名稱

l  $?

保存著命令或者腳本運行狀態碼,上一條命令運行成功結果顯示0

l  $#

保存了腳本要處理的參數個數

位置變數

l  為了在使用shell腳本程式時,方便通過命令行為程式提供操作數,bash引入了位置變數的概念

l  位置變數有$0,$n,n為1~9之間的數字

l  $0:第一個欄位表示命令名或腳本程式名

l  $1為腳本要處理的第一個參數,$2為第二個參數,……

l  Shell腳本最多可以直接處理9個參數

 

環境變數

l  環境變數指的是出於運行需要而由Linux系統提前創建的一類變數,主要用於設置用戶的工作環境

l  使用env命令可以查到當前工作環境下的環境變數

l  PATH環境變數用於設置可執行程式的預設搜索路徑

l  環境變數的全局配置文件為/etc/profile,每個用戶還有自己的獨立的配置文件~/.bash_prpfile

 

 

這是shell編程初步接觸,後續發各種shell編程語句。下麵有一個簡單的腳本樣例

------一個小計算器-----

 

#!/bin/bash

#this

 

read -p "請輸入第一個整數:" ONE

read -p "請輸入第二個整數:" TWO

read -p "請輸入運算符:" TH

echo "$ONE$TH$TWO=$(($ONE $TH $TWO))"

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 報錯信息:There is already an open DataReader associated with this Connection which must be closed first 緩解的方案:在實例化database的時候利用線程獨立實例化,每個線程一個單獨的database實例 ...
  • 因為access_token,在以後的高級功能裡面會經常用到,所以這裡不得不這裡對前面所講解的access_token改造一下。另外需要說明的是access_token是變化的,有自己的周期,官方解釋為:"有效期為7200秒",這就要求我們把獲得的access_token存入一個物理文件或者Appl ...
  • 系列文章 1. 開源一款強大的文件服務組件(QJ_FileCenter)(系列一) 2. 開源一款強大的文件服務組件(QJ_FileCenter)(系列二 安裝說明) 3. 開源一款強大的文件服務組件(QJ_FileCenter)(系列三 訪問介面與項目集成)計劃中... 4. 開源一款強大的文件服 ...
  • 需要掌握的重要目錄 /etc/sysconfig/network-scripts/ifcfg-eth0:網卡配置文件 /etc/resolv.conf:客戶端DNS /etc/hosts:本地的主機名解析的文件 /etc/sysconfig/network:主機名 /etc/fstab:開機磁碟自動 ...
  • 一、搭建前言 很多公司都有自己搭建的yum倉庫,這樣做的好處有以下幾點: 1)節省流量,避免從公網重覆下載軟體包;為公司省錢; 2)提升下載速度;外網下載受帶寬影響,下載速度較慢,而yum倉庫在區域網中就很快; 3)方便統一管理,軟體版本,都能做到統一; 4)避免訪問外網,很多大公司,都是與公網隔絕 ...
  • 一、簡介 LVS是 Linux Virtual Server 的簡稱,也就是Linux虛擬伺服器。這是一個由章文嵩博士發起的一個開源項目,它的官方網址是http://www.linuxvirtualserver.org,現在 LVS 已經是 Linux 內核標準的一部分。使用 LVS 可以達到的技術 ...
  • 0、需要環境 安裝包:mongodb-linux-x86_64-3.4.6.tgz 安裝路徑:/usr/mongodb 伺服器: 192.168.177.131/132/133 mongos 20000 config server 21000 shard1 20001 shard2 20002 sh ...
  • Apache(httpd) 有3種核心MPM(Multi-Processing Module,多進程處理模塊)工作模式,分別是prefork,worker和event,其中httpd-2.2的event模式仍然為測試使用的模型,而httpd-2.4的event模式則可在生產環境中使用。如果是通過yu ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...