CentOS之Shell文件編寫基礎

来源:https://www.cnblogs.com/guoyansi19900907/archive/2018/04/01/8688118.html
-Advertisement-
Play Games

shell文件以.sh結尾,這是一種習慣而已。第一行以#! /bin/bash開頭;表示該文件使用的是bash語法; 如果不設置該行,你的shell腳本也可以執行,但是不符合規範。#表示註釋。 # vim first.sh 輸入以下內容 #! /bin/bash date echo "Hello w ...


shell文件以.sh結尾,這是一種習慣而已。第一行以#! /bin/bash開頭;表示該文件使用的是bash語法;

如果不設置該行,你的shell腳本也可以執行,但是不符合規範。#表示註釋。

 

# vim first.sh

輸入以下內容

#! /bin/bash

date

echo "Hello world!"

退出文件編輯

# sh first.sh   執行腳本

# ./first.sh   提示許可權不夠

# chmod +x first.sh

# ./first.sh   執行腳本

# sh -x first.sh  查看shell的執行過程,方便調試

date用法

date  +%Y:以四位數字格式列印年分

date +%y:二位數展示年分

date +%m :月份

date +%d:日期

date +%H:小時

date +%M:分鐘

date +%S:秒

date +%w:星期;0表示周日。

# date +"%Y-%m-%d %H:%M:%S"

# date -d "-1 day" +%d  一天前的日期

# date -d  "-1 hour" +%H  一個小時前

# date -d  "-1 min" +%M   一分鐘前

變數

  1)變數名=變數值

  2)腳本中的反引號(鍵盤左上角 波浪線鍵)是將字元串當成shell命令執行,返回命令的執行結果。

d=`date  +%H:%M:%S`   變數

echo "腳本開始時間 $d."

echo "現在休眠2秒"

sleep 2

d1=`date +%H:%M:%S`     變數

echo  "腳本結束:$d1."

數學運算

a=1

b=2

sum=$[$a+$b]

echo "$a+$b=$sum"

和用戶交互

read -p   "請輸入一個數字:" x

read -p  "請再次輸一個數字:" y

sum=$[$x+$y]

echo   "這個和是:$sum"

腳本預設變數

文件a.sh,內容如下

sum=$[$1+$2]

echo "sum=$sum"

執行腳本  sh a.sh   1 2

輸出結果 sum=3

$1和$2是shell腳本的預設變數。  $0表示腳本本身的名字。

邏輯語句

  if

    if   判斷語句;  then

       command

    fi

編寫腳本文件 a.sh

read -p "請輸入一個數字:" a

if((a<60)); then

  echo "$a 小於60"

fi

退出編輯

  if else

  if  判斷語句; then

    command

  else

    command

  fi

新建a.sh,內容如下

read -p "請輸入一個數字:" a

if((a<60)); then

  echo “小於60”

else

  echo "大於60"

fi

退出腳本編輯。

 else if

if 判斷語句;then

  command

elif 判斷語句;then

  command

else

  command

fi

新建sh文件a.sh,腳本如下

read -p "請輸入數字:" a

if((a<60));then

  echo "小於60";

elif ((a<120)) && ((a>=60)); then

  echo "小於120,但是大於60"

else

  echo "大於120"

fi

判斷大小除了使用(())形式外,還可以使用[ ];但是不能使用>,<,=了;

要使用-lt(小於),-gt(大於),-le(小於等於),-ge(大於等於),-eq(等於),-ne(不等於)。

# a=10; if [$a  -lt 5 ];then echo ok; fi

# a=10;if [$a  -gt 5];then echo ok; fi

# a=10; if [$a  -lt  1] || [$a  -gt  5];then echo ok;fi

文檔的判斷

格式:

if [-參數  filename];then

  command

fi

參數:

  -e:判斷文件或目錄是否存在

  -d:判斷是不是目錄以及是否存在。

  -f:判斷是不是普通文件以及是否存在

  -r:判斷是否有讀的許可權

  -w:判斷是否有寫許可權

  -x:判斷是否可執行

示例:

  if [ -d /home/];then echo ok;fi    判斷home是否是目錄以及是否存在。

case 邏輯判斷

case 變數 in

value1)

  command

  ;;

value2)

  command

  ;;

*)

  command

  ;;

esac

read -p "輸入一個數字:" n

a=$[$n%2]

case $a in

1)

  echo "奇數"

  ;;

2)

  echo "偶數"

  ;;

*)

  echo "不是一個數字"

  ;;

esac

 

for迴圈:seq 1 5表示從1 到5的序列。

示例1

for i in `seq 1 5`;do

  echo $i

done

示例2 :迴圈字元和數字的組合

for i in 1 2 3  a b;do echo $i;done

示例3:迴圈系統命令

for i in  `ls`;do echo $i;done

while 迴圈

while 條件;do

  command

done

示例1:

a=5

while [$a -ge 1];do

  echo $a

  a= $a-1

done

示例2:while死迴圈,用於監控

  while  :;do

    sleep 3

  done

 

函數

function sum()

{

  sum1=$[$1+$2+$3]

  echo $sum1

}

sum $1 $2 $3

運行腳本: sh a.sh 1 3 4    結果是8

break或continue(用法相似)

for i in `seq 1 5`

do

  echo $i

  if [$i==3]

  then

    break(或者 continue)

  fi

  echo $i

done

  echo aaa

exit退出整個shell腳本


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

-Advertisement-
Play Games
更多相關文章
  • 1.const是不變常量,在編譯的時候就需要有確定的值,只能用於數值和字元串,或者引用類型只能為null.(這裡為什麼要把字元串單獨拿出來?是因為字元串string是引用類型,但是使用的時候卻感覺是值類型,它是一種特殊的引用類型,後面會詳細說),struct也不能用const標記。const可以修飾 ...
  • 概述 前面 New UWP Community Toolkit 文章中,我們對 2.2.0 版本的重要更新做了簡單回顧,其中簡單介紹了 Staggered panel,本篇我們結合代碼詳細講解 Staggered panel 的實現。 Staggered panel 是一種交錯排列的面板控制項,允許面 ...
  • 上周需要做一個圖片上傳並且將上傳的圖片線上可以裁剪展示,覺得這個功能很有用,但是找參考資料的時候卻並不是很多,因此來將我用到的總結總結,也讓有需要的博友們直接借鑒。 首先環境介紹: 1、asp.net mvc網站,用到的前端插件是JCrop和Bootstrap-fileinput,在後端用框架自帶的 ...
  • 我將討論一些我認為應該應用於“容器管理”應用程式設計的原則。 模式1:服務字典 字典或關聯數組是我們在軟體工程中學到的第一個構造。 很容易看到使用依賴註入組成對象的字典和IoC容器之間的類比: 未使用容器 使用容器 這兩看起來不同的是: 一些花哨的新術語'Register'和'Resolve'被使用 ...
  • 最近將公司的項目用.netcore重寫, 服務的http外部介面部分收發消息是DES加解密的, 那麼在asp.net core mvc的action處理之前需要加入解密這個步驟. 我第一想到的是用filter的方法來做, 找到了ActionFilter, 重寫了OnActionExecuting方法 ...
  • # 安裝 telnet 避免 ssh 無法登錄 yum -y install xinetd telnet telnet-server yum -y install xinetd telnet telnet-server yum -y install xinetd telnet telnet-serv ...
  • 雙網卡一般情況不能有兩個網關 特別是別設內網網關,這樣有段時間過後會出現訪問不了外網情況 支持兩個網關的方法倒是有 讓雙網卡一臺電腦擁有兩個網關(轉) 首先要聲明一點,雙網卡一臺電腦擁有兩個網關是不可能的,因為預設網關(default gateway)只能是一個。 給伺服器安裝兩塊網卡,分別設置不同 ...
  • 如何統計 Linux 中文件和文件夾/目錄的數量 在本教程中,我們將向您展示如何使用多個命令,並使用 ls、egrep、wc 和 find 命令執行一些高級操作。 下麵的命令將可用在多個方面。 為了實驗,我打算總共創建 7 個文件和 2 個文件夾(5 個常規文件和 2 個隱藏文件)。 下麵的 tre ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...