主頁 >  其他 > shell script總結大全

shell script總結大全

2021-02-09 13:25:56 其他

sheel script

shell腳本語法規范

如何書寫一個shell腳本

  • 檔案沒有擴展名的概念,最好以.sh結尾,最好在30個字符以內

  • #代表注釋,#!是特例,定義腳本在哪個路徑運行

  • 腳本的說明欄位

    • 運行決議路徑#!/bin/bash
    • 作者#Author:guying
    • 時間#Created Time
    • 版本號#Release:1.0
    • 腳本描述#Script Description:nginx install script
    • 如何自動生成???
  • 腳本組成

    • #解釋環境:例如#!/user/bin/env或者bash |python|perl
    • #注釋說明
    • #執行代碼
  • 如何運行一個shell腳本

    • 給執行權限 ./檔案名
    • 解釋器直接運行,不需要給權限 bash 檔案名
    • 解釋環境有很多種,例如bash sh ,用cat /etc/shells查看
  • shell中的特殊符號

    • ~ 代表家目錄,# cd ~
    • ! 執行歷史命令 !!執行上一條命令
    • $ 變數中取內容符
          • % 對應數學運算,加減乘除取余數
    • & 后臺執行
      • shell中的通配符 匹配所有
    • ? shell中的通配符 ,匹配除了回車鍵以外的一個字符
    • ; 分號可以在shell中一行執行多個命令,命令之間用分號分隔
    • | 管道
    • \ 轉義字符
    • 反引號 ,命令中執行命令 echo ”today is date+%F
    • ’ ’ 單引號,腳本中字符要用單引號引起來,但是不同于雙引號的是,單引號不解釋變數
    • " " 雙引號,腳本中出現的字串可以用雙引號引起來
  • shell在管道中的應用

    • 用于拼接命令,通過管道可以執行一些復雜的資料處理操作

shell中的運算

  • 算術運算(四則運算)

          • % 對應數學運算,加減乘除取余數
      • 運算命令

        • 整形運算

          • -expr只能做整數運算
          • -let只能做整數運算,而且運算元素必須是變數,無法直接對整數做運算let sum=1+1
          • -$(( ))雙小圓括號里也可以做數學運算
          • -bc計算器
      • 浮點運算

        • -bc采用命令組合的方式實作,echo “scale=N;數學運算式”|bc,例如echo ”scale=2;100*3“|bc
  • 比較運算

    • 整形比較運算

      • 精確比較

        • -eq等于
        • -gt大于
        • -lt小于
      • 模糊比較

        • -ge大于或等于
        • -le小于或等于
        • -ne不等于
  • 字串比較運算

    • =等于回傳true
    • ! =不等于回傳ture
    • -n 檢查字串的長度是否大于0,不為0回傳true
      • z 檢查字串的長度是否為0,為0回傳true
    • $ 檢測字串是否為空,不為空就回傳true
  • 邏輯運算

    • 使用場景

      • 多條件同時判斷
    • 邏輯運算子

      • && 真真為假、真偽為假、假假為假
      • || 真真為真、真偽為真、假假為假
      • ! 非假為真、非真為假
    • 邏輯與或的短路運算

      • 邏輯與中靠前的條件中出現了假,后面的就不再判斷了,因為已經是假的了
      • 邏輯或中靠前的條件中出現了真后面的就不再往后判斷了,結果已經為真了
  • 檔案判斷(檔案型別、權限、新舊判斷)

    • test判斷命令

      • 檢測檔案型別和比較運算

      • teat [命令選項] 運算式

        • 命令選項

          • -d 檢查檔案是否存在且為目錄,若存在且為目錄則為真
          • -e 檢查檔案是否存在,存在則為真
          • -f 檢查檔案是否存在且為檔案,若存在且為檔案則為真
          • -r 檢查檔案是否存在且可讀
          • -s 檢查檔案是否存在且不為空, 如果檔案存在且至少有一個字符則為真
          • -w 檢查檔案是否存在且可寫,可寫則為真
          • -x 檢查檔案是否存在且可執行,可執行則為真
          • -O 檢查檔案是否存在且被當前用戶擁有
          • -G 檢查檔案是否存在且默認組為當前用戶組
          • -nt file1 -nt file2檢查file1是否比file2新
          • -nt file1 -ot file2檢查file1是否比file2舊
          • -ef file1 -ef file2檢查file1和file2是否為同一個檔案,判斷依據的是i節點
          • -b 檢查檔案是否為塊設備檔案,若檔案存在且為塊檔案則為真
          • -c 檢查檔案是否為字符設備檔案,如果檔案存在且為字符特殊檔案則為真
          • -g 檢測檔案是否設定了SGID位
          • -k 檢測檔案是否設定了
  • 布爾運算子

    • -o

    • -a

腳本的運行和退出

- 運行

	- bash 檔案名

- 退出

	- exit NUM推出腳本,釋放系統資源,NUM代表一個整數,代表回傳值,

為腳本設定可執行權限,并執行腳本

  • $ chmod +x test.sh

  • $ ./test.sh 1 2 3

    • 輸出第1、2、3個引數

格式化輸出

echo命令

  • 在顯示幕上顯示一段文字

  • echo [-ne] [字串]

  • 命令選項

    • -n 不要在最后自動換行
    • -e 若字串中出現以下的字符,則特別加以處理,而不會將它當成一般文字輸出,
  • 轉義字符

    • \b 洗掉前一個字符
    • \c 最后不加上換行符號
    • \n 換行且游標移至行首
    • \t 插入tab符號
    • \f 換行但是游標仍舊停留在原來的位置

shell的基本輸入、輸出

read命令 讀取

  • 命令選項

    • -p列印資訊
    • -t限定時間
    • -s不回顯
    • -n 輸入字符個數

echo命令

  • 顯示普通字串的時候,雙引號可以省略

  • 顯示轉義字符

    • echo “”\我是古穎"" 結果為"我是古穎"

      • 雙引號也可以省略
  • 顯示變數

    • read name
    • echo “$name It is a test”
  • 顯示換行

    • echo -e “OK! \n” # -e 開啟轉義
  • 顯示不換行

    • echo -e “OK! \c” # -e 開啟轉義 \c 不換行
  • 顯示結果定向至檔案

    • echo “It is a test” > myfile
  • 原樣輸出字串,不進行轉義或取變數(用單引號)

    • echo ‘$name"’
  • 顯示命令執行結果

    • echo date 這里是單引號

printf命令

  • 語法:printf format-string [arguments…]

    • format-string: 為格式控制字串
    • arguments: 為引數串列
  • 格式替代符

    • %s

      • 輸出一個字串
    • %c

      • 輸出一個字符
    • %d

      • 整形輸出
    • %f

      • 輸出實數
    • %-10s

      • 指一個寬度為 10 個字符(- 表示左對齊,沒有則表示右對齊),任何字符都會被顯示在 10 個字符寬的字符內,如果不足則自動以空格填充,超過也會將內容全部顯示出來,
    • %-4.2f

      • 指格式化為小數,其中 .2 指保留2位小數,
  • printf的轉義序列

shell字串

單引號

  • 單引號里的任何字符都會原樣輸出,單引號中的變數是無效的
  • 單引號內的字串中不能出現單獨一個的單引號,可成對出現,對單引號使用轉義字符后也不行

雙引號

  • 雙引號中可以有變數
  • 雙引號中可以出現轉義字符

拼接字串

  • 使用雙引號拼接!!!

string=“guying is so beautiful”

  • 獲取字串長度

    • echo $(#string) 輸出為4
  • 提取子字串

    • 從字串第二個字符開始截取4個字符

      • echo ${string:1:4} 輸出為 uyin
  • 查找子字串

    • 查找字符i或g的位置(哪個字母先出現,就計算哪個)

      • echo expr index "$string" ig 輸出為1

        • 注意是反引號

shell陣列

定義陣列

  • 用括號表示陣列,陣列元素用空格符號分開

    • array_name=(value0 value 1 value2)

    • 或者單獨定義陣列的各個分量:

      • array_name[0]=value0

讀取資料

  • 讀取元素值

    • ${陣列名[下標]}

      • valuen=${array_name[n]}
  • 使用@獲取陣列的所有元素

    • echo ${array_name[@]}

獲取陣列的長度(與獲取字串的方法相同)

  • 獲取陣列元素的個數

    • length=$(#array_name[@]}
    • 或者length=${#array_name[*]}
  • 獲取陣列單個元素的長度

    • length=${#array_name[n]}

shell注釋

#開頭就是注釋,除#!

多行注釋

  • :<<EOF
  • 中間是注釋內容
  • EOF

shell傳遞引數

  • ? 和 *和 ?@的區別

    • 相同

      • 都是參考的所有引數
    • 不同

      • 只有在雙引號中體現出來,假設在腳本運行時寫了三個引數 1、2、3,,則 " * " 等價于 “1 2 3”(傳遞了一個引數),而 “@” 等價于 “1” “2” “3”(傳遞了三個引數)

shell流程控制

if else

  • 語法格式

    • if then elif then else fi(換行寫)
    • if then else fi
    • if then fi

for回圈

  • 語法格式

    • for
    • do
    • done

while回圈

  • 用于不斷執行一系列命令,也用于從輸入檔案中讀取資料

  • 語法格式

    • while
    • do
    • done

until回圈

  • 執行一系列命令直至條件為 true 時停止,與 while 回圈在處理方式上剛好相反

  • 語法格式

    • untiil
    • do
    • done

多選擇陳述句case???esac

  • 每個 case 分支用右圓括號開始,用兩個分號 ;; 表示 break,即執行結束,跳出整個 case … esac 陳述句

跳出回圈

  • break命令

    • 跳出所有回圈(終止執行后面的所有回圈)
  • continue命令

    • 僅僅跳出當前回圈

shell函式

可以帶function fun() 定義,也可以直接fun() 定義,不帶任何引數

函式引數

  • $1 為第一個引數
  • $2為第二個引數

shell輸入輸出重定向

重定向命令串列

輸出重定向

  • command1 > file1

    • 執行command1然后將輸出的內容存入file1,

輸入重定向

  • command1 < file1

    • 從鍵盤獲取輸入的命令會轉移到檔案讀取內容

shell檔案包含

. filename # 注意點號(.)和檔案名中間有一空格

或source filename

創建兩個腳本,test1.sh和test2.sh,當test2.sh包含test1.sh,執行test2.sh時,需要給test2.sh添加可執行權限,被包含的test1.sh不需要添加可執行權限

  • $ chmod +x test2.sh
  • $ ./test2.sh

XMind: ZEN - Trial Version

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/258115.html

標籤:其他

上一篇:springboot的CSV匯入clickhouse;批量匯入資料庫

下一篇:Linux檔案系統

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more