linux-shell編程基礎

来源:https://www.cnblogs.com/zeq912/archive/2018/08/19/9501915.html
-Advertisement-
Play Games

第1章 shell基礎 1.1 什麼是shell Shell是一個命令解釋器,它在操作系統的最外層,負責直接與用戶對話,把用戶的輸入解釋給操作系統,並處理各種各樣的操作系統的輸出結果,輸出屏幕返回給用戶。 1.1.1 shell對話方式 交互的方式:從鍵盤輸入命令,通過/bin/bash的解析,可以 ...


第1章 shell基礎

1.1 什麼是shell

Shell是一個命令解釋器,它在操作系統的最外層,負責直接與用戶對話,把用戶的輸入解釋給操作系統,並處理各種各樣的操作系統的輸出結果,輸出屏幕返回給用戶。

1.1.1 shell對話方式

交互的方式:從鍵盤輸入命令,通過/bin/bash的解析,可以立即得到Shell的回應,一問一答的方式

非互動式:shell腳本 

1.2 為什麼使用shell編程

作為一個合格的運維人員必須掌握一種或一種以上的腳本語言,shell編程則是實現Linux/UNIX系統管理及自動化運維所必備的重要工具,可以把繁瑣重覆的命令寫到shell腳本中執行,節約時間,有效的提高運維人員的工作效率,減少不必要的重覆工作時間。

1.3 系統中的shell

linux系統預設shell是bash

[root@zeq ~]# cat /etc/shells

/bin/sh

/bin/bash

/sbin/nologin

/bin/dash

/bin/tcsh

/bin/csh  

第2章 變數

2.1 什麼是變數

x+y=20     x=10  y=? 未知數(變數)

一個未知數,隨時可以變化的量叫變數

2.2 變數的分類

2.2.1 普通變數(局部變數)

只能在當前環境下使用,可以通過export命令臨時把普通變數變為環境變數使用

[root@zeq ~]# ip=10.0.0.201     給變數賦值(把數據存放到變數中)

[root@zeq ~]# echo $ip

10.0.0.201

2.2.2 環境變數(全局變數)

1.大寫

2.系統定義的

3.在大部分地方可以使用

2.2.3 特殊變數

$1   $2   $數字        $後數字是幾代表shell腳本第幾個參數

$#                           shell腳本中參數的個數

                               判斷腳本的參數個數

$?                          上一個命令的執行結果(返回值)

                              0             執行正確

                              非0           執行失敗

$0                          腳本文件名

第3章 shell腳本的書寫規範

3.1.1 腳本存放位置

為了防止腳本亂放,統一存放在/server/scripts/中

創建目錄

[root@zeq ~]# mkdir -p /server/scripts/

[root@zeq ~]# cd /server/scripts/

3.1.2 腳本編輯使用vim

3.1.3 選擇解釋器

在執行bash腳本的時候,內核會根據"#!"後的解釋器來確定該用那個程式解釋這個腳本中的內容。

[root@zeq ~]# vim /server/scripts/cal.sh    

#!/bin/bash

3.1.4 文件名書寫

文件名稱一定要有意義,方便看出是幹嘛用的腳本,並且以.sh結尾

3.1.5 書寫腳本的規範和習慣

1、  放在統一目錄下,方便查找

2、  書寫腳本要用vim編輯,

  批量刪除

  批量增加

  1.進入批量編輯模式(可視塊)esc下ctrl+v

  2.選擇 批量增加的範圍

  3.按 shift + i 進行修改

  4.按esc 退出等等

3、 腳本文件名稱以.sh結束

4、 腳本開頭一定要指定解釋器

5、 腳本中#代表註釋,#後的內容不會執行,不用的命令等可以用#註釋掉,腳本中儘量不要出現中文註釋以免出現因字元集不同產生亂碼

6、 代碼符號書寫規範

     1.成對的符號一定要都寫出來再添加內容,避免遺忘漏寫;如 "" '' []等

     2.流程式控制制語句一次書寫完,再添加內容;(if 條件 ; then  內容;fi)

       3.書寫的代碼符號都是英文輸入法格式

       4.通過縮進讓代碼易讀

第4章 shell練習

書寫一個計算器腳本

4.1 數字計算方法

[root@zeq ~]# awk  'BEGIN{print 1/2}'

0.5

4.1.1 命令行中的變數 放在awk中使用

awk -v變數=賦值       變數名稱自己定義

[root@zeq ~]# awk -vnum1=10  -vnum2=20 'BEGIN{print num1/num2 }'    這裡變數為num1和num2

0.5

4.1.2 書寫腳本計算10與20的加減乘除

[root@zeq]# vim cal.sh

#!/bin/bash

 

n1=10

n2=20

 

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1+num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1-num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1*num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1/num2 }'

執行腳本

[root@zeq /server/scripts]# sh cal.sh

30

-10

200

0.5

4.1.3 定義特殊變數 通過命令行傳遞參數方式進行計算

[root@zeq /server/scripts]# vim  cal.sh

#!/bin/bash

 

n1=$1          第一個參數

n2=$2          第二個參數

 

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1+num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1-num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1*num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1/num2 }'
 執行腳本
[root@zeq /server/scripts]# sh cal.sh 10 20       後面要跟上兩個參數才能執行成功,參數之前加空格

30

-10

200

0.5

4.2 通過read 互動式

read互動式賦予變數內容

read -p "提示信息:"  變數名字

read -p "提示信息:"  p

執行之後會把輸入的信息存放在變數中

[root@zeq /server/scripts]# read -p "input num1:" n1

input num1:zeq

[root@zeq /server/scripts]# echo $n1

zeq

4.2.1 通過read命令實現 n1 n2賦值 進行計算

[root@zeq /server/scripts]# vim cal.read.sh

#!/bin/bash

 

read -p "input num1,num2:" n1 n2     一條命令直接定義兩個變數

 

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1+num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1-num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1*num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1/num2 }'

執行腳本

[root@zeq /server/scripts]# sh cal.read.sh

input num1,num2:10 20         隨便輸入兩個數值,中間要有空格

30

-10

200

0.5 

4.3 條件表達式  if

4.3.1 判斷目錄、文件是否存在

[ -d /data ]

[ -f /data ]          

註意格式:[空格-f /data空格]   []裡面兩端必須有空格,中間寫內容

[root@zeq /server/scripts]# [ -d /data ]

[root@zeq /server/scripts]# echo $?                 $?特殊變數,0代表執行正確,非0執行失敗

0

[root@zeq /server/scripts]# [ -d /data123 ]

[root@zeq /server/scripts]# echo $?

1

4.3.2 比大小

-eq         equal         ==

-ne     not equal         !=

-gt     great than        >

-ge     great equal       >=

-lt     less  than        <

-le     less  equal       <=

4.3.3 比大小舉例

[root@zeq /server/scripts]# [ 10 -eq 10 ]

[root@zeq /server/scripts]# echo $?                

0

[root@zeq /server/scripts]# [ 10 -gt 10 ]

[root@zeq /server/scripts]# echo $?

1

[root@zeq /server/scripts]# [ 10 -ge 10 ]

[root@zeq /server/scripts]# echo $?

0

4.3.4 if單分支格式腳本

格式: if [ 條件 ];then

        命令

fi

 

1、判斷腳本的參數個數,如果不是2則提示請輸入兩個數字

[root@zeq /server/scripts]# cat pan.sh

#!/bin/bash

 

if [ $# -ne 2 ];then

   echo "輸入兩個數字"

fi

2、 給計算器(參數傳遞)增加一個條件

判斷腳本的參數個數,

如果不是2則

提示請輸入兩個數字

[root@zeq /server/scripts]# cat cal.sh

#!/bin/bash

 

n1=$1

n2=$2

 

if [ $# -ne 2 ];then

   echo "USAGE: $0 num1 num2"                                  $0文件名

   exit                                                        exit  退出的意思

fi

 

 

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1+num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1-num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1*num2 }'

awk -vnum1=$n1  -vnum2=$n2 'BEGIN{print num1/num2 }'

3、執行腳本

[root@zeq /server/scripts]# sh  cal.sh

USAGE: cal.sh num1 num2

[root@zeq /server/scripts]# sh  cal.sh 120 20

140

100

2400

6

4.3.5 if雙分支格式腳本

格式: if [ 條件 ];then

        命令

             else

          命令

fi

 

1、comp.sh輸入兩個數字:

 1.如果n1大於n2

 輸出 n1 > n2

 2.如果n1不大於n2

 輸出 n1 <= n2

[root@zeq /server/scripts]# cat  comp.sh

#!/bin/bash

 

n1=$1

n2=$2

 

if [ $n1 -gt $n2 ];then

   echo "$n1 > $n2"

else

   echo "$n1 <= $n2"

fi

2、執行腳本

[root@zeq /server/scripts]# sh comp.sh 10 20

10 <= 20

[root@zeq /server/scripts]# sh comp.sh 10 10

10 <= 10

[root@zeq /server/scripts]# sh comp.sh 100 10

100 > 10

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

-Advertisement-
Play Games
更多相關文章
  • 轉載請註明出處: https://www.cnblogs.com/zhiyong-ITNote/ DI的大概過程抽象成如下:介面對象 <-- 實現對象 <-- 抽象對象 在抽象對象中引入介面,通過實例化介面對象來調用實現對象的方法或是成員變數。那麼就需要實現或者生成抽象對象,一般在已有的IOC框架或 ...
  • 一、面向對象(OOP) 面向過程 面向過程就是分析出解決問題的所需要的步驟,然後每個步驟使用函數實現,使用時將函數依次調用即可 C語言 面向對象 對象:生活中真實存在的事物(電腦、手機、草、樹......) 面向對象是把構成問題的事物分解成各個對象,建立對象的目的不是完成步驟,而是為了描述某個對象在 ...
  • 1. 設置 -> 頁首Html代碼,加入如下代碼,並保存: <script src="http://latex.codecogs.com/latex.js" type="text/javascript"></script> 2. 採用latex線上編輯公式,網站為http://www.codecog ...
  • 在理清 "路由" 的工作流程後,接下來需要考慮的,是MVC框架如何生成Controller以及它的生成時機。 根據以前ASP.NET MVC的經驗,Controller應該是由一個ControllerFactory構建的。查看ASP.NET Core MVC的源碼,果然是有一個DefaultCont ...
  • 0.簡介 如果你所開發的需要走向世界的話,那麼肯定需要針對每一個用戶進行不同的本地化處理,有可能你的客戶在日本,需要使用日語作為顯示文本,也有可能你的客戶在美國,需要使用英語作為顯示文本。如果你還是一樣的寫死錯誤信息,或者描述信息,那麼就無法做到多語言適配。 Abp 框架本身提供了一套多語言機制來幫 ...
  • 開發WebApi時通常需要為調用我們Api的客戶端提供說明文檔。Swagger便是為此而存在的,能夠提供線上調用、調試的功能和API文檔界面。 環境介紹:Asp.Net Core WebApi + Swagger。 一、加入Swagger組件 Swashbuckle.AspNetCore 中分為3個 ...
  • using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Net;us ...
  • 有時候想在自己電腦、路由器或者樹莓派上搭建一些web、vpn等服務讓自己用,但是自己的電腦一般沒有外網ip,沒法在外部訪問這些服務,就像下圖,電腦能訪問到外網,但是沒法從外網訪問到電腦。 這時可以用一臺有外網ip的伺服器利用ngrok在中間做個跳板,如下圖,原理是搭有web服務的內網電腦A 與公網服 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...