黑龙江建设人力资源网站,洛阳自助建站,用网站做邮箱,wordpress如何实现文章目录 命令行脚本参考 - bat命令行脚本参考 - bash值得学习的知识点1. 识别终端使用的语言2. 函数的编写3. 获取用户的输入4. bat文件老是乱码怎么办 有时候为了方便别人使用#xff0c;我们会选择去编写各种各样的命令行脚本#xff1a;给Windows用户编写.bat cmd批处理脚… 文章目录 命令行脚本参考 - bat命令行脚本参考 - bash值得学习的知识点1. 识别终端使用的语言2. 函数的编写3. 获取用户的输入4. bat文件老是乱码怎么办 有时候为了方便别人使用我们会选择去编写各种各样的命令行脚本给Windows用户编写.bat cmd批处理脚本给macOS、Linux用户编写.sh bash shell脚本。
面向国内用户当然应当首选中文作为脚本的显示语言如果还要支持海外用户使用那么能提供国际化多语言i18n支持那是最好了省事的也许只提供英文版本i18n这个概念太大了本篇文章记录的是如何简单的实现根据用户语言环境让脚本自动显示成中文或英文当然如果你愿意同时支持更多语言也是可以的。
命令行脚本参考 - bat
echo off
::请保存成gbk编码.bat文件为了防止乱码吞掉关键字符所有多字节字符文本后面均多放了几个空格
::取消下面这行注释可以切换成英文代码页cmd窗口
::chcp 437::识别当前语言0英文1中文2...更多支持的语言中文识别简单粗暴
set CurrentLang0
ver | find 版本%qjkTTT% nul set CurrentLang1::封装echo输出函数通过2个或更多参数提供不同语言的文字只显示当前语言文字
goto func__echo2:echo2if %CurrentLang%1 echo %~1if %CurrentLang%0 echo %~2goto:eof
:func__echo2::测试
call:echo2 显示语言简体中文 Language: English
call:echo2 脚本运行啦 The script is running
pause命令行脚本参考 - bash
#!/usr/bin/env bash
# 请保存成utf-8编码.sh文件将文件设为允许执行然后到终端中执行即可测试# 识别当前语言0英文1中文2...更多支持的语言
CurrentLang0
if [ $(echo ${LANG/_/-} | grep -Ei \\b(zh|cn)\\b) ]; then CurrentLang1; fi# 封装echo输出函数通过2个或更多参数提供不同语言的文字只显示当前语言文字
function echo2(){if [ $CurrentLang 1 ]; thenecho $1; #显示中文elseecho $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直接调用.NET编译运行c#代码支持.NET Core、.NET Framework环境下PEMPKCS#1、PKCS#8格式RSA密钥生成、导入、导出多种常见RSA加密、签名填充算法支持。
和 https://github.com/xiangyuecn/RSA-java 同样sh、bat两个脚本无需IDE直接调用JDK编译运行java代码使用bash、bat脚本代码方便好使也方便参考。
值得学习的知识点
1. 识别终端使用的语言
骚一点的办法可以直接通过查询终端的版本号中显示文本是否包含“版本”这两个字来判断是中文环境还是英文环境bash、bat cmd中均支持主要是非常简单不排除部分情况下使用这种方式判断出来的结果和实际可能不符。另外bash里面可以用$LANG环境变量来判断也很好使。
// bat中ver //输出Microsoft Windows [版本 10.0.****.***]//bash中bash -version //输出GNU bash版本 5.1.16 ......2. 函数的编写
bash本身就支持函数的编写所有比较简单通过function echo2(){ ... }来定义函数echo2函数内通过$1 $2 $3 ...来获取参数。调用时直接写函数名字加参数即可完成函数调用echo2 args1 args2 args3参数可以用引号包裹起来参数内有空格是必须包裹的没有参数就直接写一个函数名字就完成了调用echo2。
cmd的bat脚本里面没有专门定义函数的语法但它支持标签和goto跳转想到哪执行就到哪执行巨灵活且标签支持call:lable调用搭配特殊的标签eof可以返回到call调用点。
因此我们在bat脚本里面可以通过:echo2来定义函数入口位置通过goto:eof来定义函数结束位置函数内通过%1 %2 %3 ...来获取参数%1这种不会去掉参数首尾的引号使用%~1会去掉首尾的引号。
虽然通过标签:echo2定义了函数echo2但bat脚本执行时会一行一行的执行标签后面的函数内容因此我们在:echo2之前要通过goto来跳过函数体因此我们在函数结尾放一个:func__echo2标签标签名字随意函数开头放一个goto func__echo2这样执行的时候就会跳过这个函数体。
最后函数的调用使用call:echo2 args1 args2 args3来调用函数参数可以用引号包裹起来参数内有空格是必须包裹的没有参数就直接写一个call:echo2就完成了调用。
3. 获取用户的输入
bash中通过read命令来获取输入bat中通过set /p来获取输入。
//bat中
set textset /p text^ //bash中
read -rp text上面这个代码在不同环境中均会显示出 然后等待用户输入回车后就会将文本内容存入text变量中值得要注意的是bat中如果没有输入内容直接回车变量将不会赋值为空这个设定比较奇葩因此需要在输入前提前把变量设为空或者输入之后使用 || set text来设为空也可以。
4. bat文件老是乱码怎么办
嘿bat脚本这玩意跟随系统默认编码要是utf-8保存的文件中文准要乱码得在文件开头使用chcp 65001强制切换成utf-8代码页但下脚本是不乱码了但调用很多程序命令输出的内容反而变成了乱码还是老实用gbk编码。
注意到bat文件内所有多字节字符文本中文后面均特意多写了几个空格这是为了防止在乱码时换行符、引号等符号被乱码吞掉有无作用有待考证就算bat文件乱码了也能正确执行并且输出里面的英文内容。上面代码里面有个 版本%qjkTTT%这个也是一个特殊处理防止乱码时结尾的引号被吞掉锟斤拷 · 烫烫烫 最终抗下了所有。
【完】