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

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

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

正文

有時(shí)候?yàn)榱朔奖銊e人使用,我們會(huì)選擇去編寫各種各樣的命令行腳本:給Windows用戶編寫.bat cmd批處理腳本,給macOS、Linux用戶編寫.sh bash shell腳本。

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

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

命令行腳本參考 - bat

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

命令行腳本參考 - bash

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

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

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

值得學(xué)習(xí)的知識(shí)點(diǎn)

1. 識(shí)別終端使用的語(yǔ)言

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

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

2. 函數(shù)的編寫

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

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

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

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

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

3. 獲取用戶的輸入

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

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

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

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

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

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

以上就是Shell腳本命令行批處理bash sh cmd bat函數(shù)極簡(jiǎn)學(xué)法的詳細(xì)內(nèi)容,更多關(guān)于Shell命令行bash sh cmd bat的資料請(qǐng)關(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 錯(cuò)誤解決辦法

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

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

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

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

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

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

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

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

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

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

    Shell腳本中if條件判斷的寫法實(shí)例

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

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

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

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

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

    詳解Linux下讀取位圖的注意事項(xiàng)

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

最新評(píng)論