欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Shell腳本命令行批處理bash?sh?cmd?bat函數(shù)極簡學法

 更新時間:2023年09月13日 10:23:14   作者:高堅果  
這篇文章主要為大家介紹了Shell腳本中文英文多語言國際化和命令行批處理(bash?sh?cmd?bat)中定義函數(shù)的簡單寫法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助

正文

有時候為了方便別人使用,我們會選擇去編寫各種各樣的命令行腳本:給Windows用戶編寫.bat cmd批處理腳本,給macOS、Linux用戶編寫.sh bash shell腳本。

面向國內(nèi)用戶當然應當首選中文作為腳本的顯示語言,如果還要支持海外用戶使用,那么能提供國際化多語言(i18n)支持那是最好了,省事的也許只提供英文版本;

i18n這個概念太大了,本篇文章記錄的是如何簡單的實現(xiàn):根據(jù)用戶語言環(huán)境,讓腳本自動顯示成中文或英文,當然如果你愿意,同時支持更多語言也是可以的。

命令行腳本參考 - bat

@echo off
::請保存成gbk編碼.bat文件,為了防止亂碼吞掉關(guān)鍵字符,所有多字節(jié)字符文本后面均多放了幾個空格  
::取消下面這行注釋可以切換成英文代碼頁cmd窗口  
::chcp 437
::識別當前語言,0英文,1中文,2...更多支持的語言,中文識別簡單粗暴  
set CurrentLang=0
ver | find "版本%qjkTTT%" > nul && set CurrentLang=1
::封裝echo輸出函數(shù),通過2個或更多參數(shù)提供不同語言的文字,只顯示當前語言文字  
goto func__echo2
    :echo2
        if "%CurrentLang%"=="1" echo %~1
        if "%CurrentLang%"=="0" echo %~2
    goto:eof
:func__echo2
::測試  
call:echo2 "顯示語言:簡體中文  " "Language: English"
call:echo2 "腳本運行啦  " "The script is running"
pause

命令行腳本參考 - bash

#!/usr/bin/env bash
# 請保存成utf-8編碼.sh文件,將文件設為允許執(zhí)行,然后到終端中執(zhí)行即可測試
# 識別當前語言,0英文,1中文,2...更多支持的語言
CurrentLang=0
if [ $(echo ${LANG/_/-} | grep -Ei "\\b(zh|cn)\\b") ]; then CurrentLang=1; fi
# 封裝echo輸出函數(shù),通過2個或更多參數(shù)提供不同語言的文字,只顯示當前語言文字
function echo2(){
    if [ $CurrentLang == 1 ]; then
        echo $1; #顯示中文
    else
        echo $2; #顯示英文
    fi
}
#測試
echo2 "顯示語言:簡體中文" "Language: English"
echo2 "腳本運行啦" "The script is running"
read -n1 #按任意鍵退出

以上bat、bash腳本代碼參考自GitHub開源庫: https://github.com/xiangyuecn/RSA-csharp ,Test-Build-Run.bat 和 Test-Build-Run.sh 腳本,無需IDE直接調(diào)用.NET編譯運行c#代碼,支持.NET Core、.NET Framework環(huán)境下PEM(PKCS#1、PKCS#8)格式RSA密鑰生成、導入、導出,多種常見RSA加密、簽名填充算法支持。

和 https://github.com/xiangyuecn/RSA-java ,同樣sh、bat兩個腳本,無需IDE直接調(diào)用JDK編譯運行java代碼,使用bash、bat腳本代碼方便好使,也方便參考。

值得學習的知識點

1. 識別終端使用的語言

騷一點的辦法可以直接通過查詢終端的版本號中顯示文本是否包含“版本”這兩個字來判斷是中文環(huán)境還是英文環(huán)境,bash、bat cmd中均支持,主要是非常簡單(不排除部分情況下使用這種方式判斷出來的結(jié)果和實際可能不符)。另外bash里面可以用$LANG環(huán)境變量來判斷,也很好使。

// bat中
> ver  //輸出:Microsoft Windows [版本 10.0.****.***]
//bash中
> bash -version //輸出:GNU bash,版本 5.1.16 ......

2. 函數(shù)的編寫

bash本身就支持函數(shù)的編寫,所有比較簡單,通過function echo2(){ ... }來定義函數(shù)echo2,函數(shù)內(nèi)通過$1 $2 $3 ...來獲取參數(shù)。調(diào)用時直接寫函數(shù)名字加參數(shù)即可完成函數(shù)調(diào)用:echo2 "args1" args2 args3,參數(shù)可以用引號包裹起來(參數(shù)內(nèi)有空格是必須包裹的),沒有參數(shù)就直接寫一個函數(shù)名字就完成了調(diào)用:echo2。

cmd的bat腳本里面沒有專門定義函數(shù)的語法,但它支持標簽和goto跳轉(zhuǎn),想到哪執(zhí)行就到哪執(zhí)行,巨靈活,且標簽支持call:lable調(diào)用,搭配特殊的標簽eof可以返回到call調(diào)用點。

因此我們在bat腳本里面可以通過:echo2來定義函數(shù)入口位置,通過goto:eof來定義函數(shù)結(jié)束位置,函數(shù)內(nèi)通過%1 %2 %3 ...來獲取參數(shù),%1這種不會去掉參數(shù)首尾的引號,使用%~1會去掉首尾的引號。

雖然通過標簽:echo2定義了函數(shù)echo2,但bat腳本執(zhí)行時會一行一行的執(zhí)行標簽后面的函數(shù)內(nèi)容,因此我們在:echo2之前要通過goto來跳過函數(shù)體,因此我們在函數(shù)結(jié)尾放一個:func__echo2標簽(標簽名字隨意),函數(shù)開頭放一個goto func__echo2,這樣執(zhí)行的時候就會跳過這個函數(shù)體。

最后函數(shù)的調(diào)用,使用call:echo2 "args1" args2 args3來調(diào)用函數(shù),參數(shù)可以用引號包裹起來(參數(shù)內(nèi)有空格是必須包裹的),沒有參數(shù)就直接寫一個call:echo2就完成了調(diào)用。

3. 獲取用戶的輸入

bash中通過read命令來獲取輸入,bat中通過set /p來獲取輸入。

//bat中
set text=&set /p text=^> 
//bash中
read -rp "> " text

上面這個代碼在不同環(huán)境中均會顯示出"> ",然后等待用戶輸入,回車后就會將文本內(nèi)容存入text變量中;值得要注意的是,bat中如果沒有輸入內(nèi)容直接回車,變量將不會賦值為空,這個設定比較奇葩,因此需要在輸入前提前把變量設為空,或者輸入之后使用 || set text=來設為空也可以。

4. bat文件老是亂碼怎么辦

嘿,bat腳本這玩意跟隨系統(tǒng)默認編碼,要是utf-8保存的文件,中文準要亂碼,得在文件開頭使用chcp 65001強制切換成utf-8代碼頁,但下腳本是不亂碼了,但調(diào)用很多程序命令輸出的內(nèi)容反而變成了亂碼,還是老實用gbk編碼。

注意到bat文件內(nèi)所有多字節(jié)字符文本(中文)后面均特意多寫了幾個空格,這是為了防止在亂碼時換行符、引號等符號被亂碼吞掉(有無作用有待考證),就算bat文件亂碼了,也能正確執(zhí)行,并且輸出里面的英文內(nèi)容。上面代碼里面有個 "版本%qjkTTT%",這個也是一個特殊處理,防止亂碼時結(jié)尾的引號被吞掉,錕斤拷 · 燙燙燙 最終抗下了所有。

以上就是Shell腳本命令行批處理bash sh cmd bat函數(shù)極簡學法的詳細內(nèi)容,更多關(guān)于Shell命令行bash sh cmd bat的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Linux里awk中split函數(shù)的用法小結(jié)

    Linux里awk中split函數(shù)的用法小結(jié)

    The awk function split(s,a,sep) splits a string s into an awk array a using the delimiter sep
    2013-03-03
  • Linux tar 命令出現(xiàn) Cowardly refusing to create an empty archive 錯誤解決辦法

    Linux tar 命令出現(xiàn) Cowardly refusing to create an empty archive

    這篇文章主要介紹了Linux tar 命令出現(xiàn) Cowardly refusing to create an empty archive 錯誤解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Bash?中?nohup?與?&?的區(qū)別及用法詳解

    Bash?中?nohup?與?&?的區(qū)別及用法詳解

    在Bash中,`&`、`nohup`和`disown`各有用途:`&`用于后臺運行命令,選擇合適的工具可以實現(xiàn)后臺任務的穩(wěn)定運行,本文介紹Bash?中?nohup?與?&?的區(qū)別及用法,感興趣的朋友一起看看吧
    2025-01-01
  • linux下ssh安裝與scp命令使用詳解

    linux下ssh安裝與scp命令使用詳解

    這篇文章主要介紹了linux下ssh安裝與scp命令使用詳解的相關(guān)資料,需要的朋友可以參考下
    2015-09-09
  • Linux shell實現(xiàn)HTTP服務示例代碼

    Linux shell實現(xiàn)HTTP服務示例代碼

    這篇文章介紹的是如何實現(xiàn)一個可以調(diào)用shell腳本的HTTP服務,本文給出了詳細的示例代碼,有需要的可以參考借鑒。
    2016-08-08
  • Linux 命令head和tail常見用法詳解

    Linux 命令head和tail常見用法詳解

    這篇文章主要介紹了Linux 命令head和tail常見用法詳解,文中分別對head和tail的基本用法做了詳細介紹,需要的朋友可以參考下
    2018-09-09
  • Shell腳本中if條件判斷的寫法實例

    Shell腳本中if條件判斷的寫法實例

    在寫shell腳本的過程中,用到了if else的寫法,突然有多個參數(shù)需要判斷,那么就想到了if else if的用法,這篇文章主要給大家介紹了關(guān)于Shell腳本中if條件判斷寫法的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • 常用的34個Linux?Shell腳本(小結(jié))

    常用的34個Linux?Shell腳本(小結(jié))

    本文主要介紹了常用的35個Linux?Shell腳本,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • linux?iptables防火墻中的工作常用命令

    linux?iptables防火墻中的工作常用命令

    linux系統(tǒng)的防火墻,IP信息包過濾u系統(tǒng),它實際上由兩個組件netfilter和iptables組成,這篇文章主要介紹了linux?iptables防火墻-工作常用命令,需要的朋友可以參考下
    2022-10-10
  • 詳解Linux下讀取位圖的注意事項

    詳解Linux下讀取位圖的注意事項

    這篇文章主要介紹了詳解Linux下讀取位圖的注意事項的相關(guān)資料,需要的朋友可以參考下
    2017-07-07

最新評論