TypechoJoeTheme

MetMan's Blog

网站页面
搜索到 16 篇与 的结果 ———
2024-11-19

LInux locale设置对Ksh浮点算术影响

LInux locale设置对Ksh浮点算术影响
今天收集到一个关于shell的有意思问题,分享给大家。问题有一个ksh脚本,功能是浮点数之间比较,脚本如下所示:#!/bin/ksh a=4.5 b=4.0 if [ $a -gt $b ]; then echo "a > b" else echo "a <= b" fi语法没有问题,很多平台下运行都没有问题,但在某一个账户下运行会报语法错误。执行脚本报错如下:$ ./test.sh ./new.sh[6]: [: 4.5: arithmetic syntax error a <= b最后发现是系统区域(locale)相关环境变量设置导致的。$ locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UT...
2024年11月19日
123 阅读
0 评论
2024-09-22

交互式登录shell

交互式登录shell
本文是上一篇文章[[TMOUT引起服务器断开连接解决方法]]的附带研究产物。TMOUT环境变量在Bash Beginners Guide的解释如下:If set to a value greater than zero, TMOUT is treated as the default timeout for the read built-in. In an interative shell, the value is interpreted as the number of seconds to wait for input after issuing the primary prompt when the shell is interactive. Bash terminates after that number of seconds if input does not arrive.TMOUT设置首先对read命令会产生影响,如果在指定时间内没有输入,Bash会退出read语句输入环境。其次,TMOUT会对交互式(interactive)shell产生影响,如果主提示符(P...
2024年09月22日
229 阅读
0 评论
2024-08-10

TMOUT引起服务器断开连接解决方法

TMOUT引起服务器断开连接解决方法
服务器管理员为了系统安全性和减少开销,一般会设置一定时间内shell没有活动自动断开连接。但如果设置时间过短,查查资料/休息下,再回终端工作发现已经退出登录是挺烦恼的。那么如何绕过这个限制保持SSH会话长时间在线?TMOUT变量首先我们要确认管理员如何实现该功能的。原先我以为自动断开连接是通过SSH配置实现的,后来发现是通过shell的TMOUT环境变量实现的。管理员会在系统配置文件/etc/profile中设置TMOUT值,并将其设为只读变量。export TMOUT=1200 # 保持在线1200秒,不活动退出 readonly TMOUT普通用户没有权限unset这个只读变量,这样用户就不能关闭这个自动退出功能了。$ unset TMOUT -bash: unset: TMOUT: cannot unset: readonly variable解决方法方法一一种解决思路是保持shell繁忙,可以在~/.bashrc加上一段代码:# ~/.bashrc alias bs="while sleep 1000; do printf '\33[0n'; done&...
2024年08月10日
266 阅读
0 评论
2024-05-21

Shell脚本检查工具ShellCheck

Shell脚本检查工具ShellCheck
ShellCheck是一个用于bash/sh shell脚本的静态分析工具,可以辅助检查脚本语法错误,给出建议增强脚本健壮性。项目地址:https://github.com/koalaman/shellcheck 作者创建了一个在线网站 https://www.shellcheck.net/ ,你可以直接将代码贴到编辑框中进行在线检查。当然你也可以将工具部署到本地计算机使用。本地部署联网安装最简单的方式是使用包管理器安装。基本上各种平台都能直接安装,比如笔者的archlinux机器:$ sudo pacman -S shellcheck安装成功后,测试脚本$ shellcheck test.sh离线安装在Github上直接下载对应平台预编译好的可执行文件,解压缩到本地即可使用。代码编辑器集成可以根据官方说明安装VIM、VSCODE等编辑器插件直接在编译器中使用。使用示例示例一$ cat test.sh #!/bin/bash cat $0 for i in {1..10} do echo $i done $ shellcheck test.sh shellc...
2024年05月21日
218 阅读
0 评论
2024-05-21

BASH脚本获得自身路径方法

BASH脚本获得自身路径方法
Shell中有一个命令叫pwd(记忆:Print Working Directory的单词首字母)可以获得当前工作目录。如果该脚本在其所在目录下执行,使用pwd命令可以得到脚本的当前目录。    # /home/user/scripts/getmydir.sh     MYDIR=`pwd`     echo $MYDIR 在/home/user/scripts目录下执行./getmydir.sh得到脚本所在的绝对路径。问题:但如果该脚本在其他目录下执行,比如在/home/user下执行scripts/getmydir.sh得到的路径却是/home/user/。 原因在于pwd命令返回路径与脚本执行时的路径有关。解决方法可以看出pwd命令获取脚本自身路径有一定限制,那么如何更加通用的获取执行脚本所在路径?思路:我们需要先将工作目录切换到脚本所在目录,通过pwd获取脚本目录,同时保证切换目录操作不影响shell当前目录。BASH有两个内置变量可以帮忙:FUNCNAME  bash内置变量,包含目前执行调用堆栈中所有shell函数名称的数组变量。FUNCNAME[0]是当前...
2024年05月21日
374 阅读
0 评论
2024-04-19

Shell if和case语法

Shell if和case语法
在学习完前面Shell退出状态和test命令内容后,再来学习if语句就简单了。if语法如下if pipeline then statements1 [ elif pipeline #方括号表示可选部分 then statements2 ] [ else statements3 ] fiif结构中使用pipeline,可以是简单的命令组合test命令管道命令根据命令的退出状态决定if执行分支。示例:if [ -f oldfile ] # 如果存在文件oldfile then mv oldfile newfile fiif语句退出状态整个if/fi结构退出状态是真正执行的语句statements最后一个命令执行退出状态。如果没有命令执行,退出状态为0.Shell脚本中可以使用:冒号作为占位命令,实际不做任何事。case语句判断一个变量可能是多个值情况时,可以使用if/elif/elif/../fi结构来完成,但也可以使用case语句实现,更加简单明了。题外话:在C语言中switch case语句一般比if语句效率更高,编译器可能会使用表...
2024年04月19日
172 阅读
0 评论
2024-04-19

Shell循环

Shell循环
每一种编程语言中循环结构都是一个重要的语法,shell也不例外。shell中循环结构包括:for循环、while循环以及until循环。这里只介绍常用的for循环和while循环。for循环for循环用于对一个对象列表中每个元素重复执行操作,其中对象列表可以是数值列表、文件名列表或者命令行参数列表等。for循环语法for var in 对象列表 do statements done可以使用;将多行语句写到一行:for var in 对象列表; do statements done 或者 for var in 对象列表; do statements; doneshell还支持C语言风格的for循环for ((exp1; exp2; exp3)) do statements done常见用法:数值列表for i in 1 2 3 4 5 6 # 循环6次 do echo $i done可以使用花括号展开生成数值列表for i in {1..6} do echo $i done还可以使用seq生成数值列表for i in `...
2024年04月19日
167 阅读
0 评论
2024-02-16

Shell变量(二)

Shell变量(二)
参数展开参数展开(parameter expansion)是shell提供变量值在脚本程序中使用的过程。缺省情况,未定义的变量会展开成null(空的)字符串。有两种方式引用变量值:$var${var}注:不要和命令替换操作$()搞混。展开运算符分为替换运算符和模式匹配运算符。替换运算符替换运算符用于测试变量是否存在,且在某种情况下允许默认值(缺省值)的替换。比如,当脚本需要根据用户输入位置参数来决定脚本执行行为时,为了防止用户执行时忘了在命令行上输入参数导致脚本运行出错,可以使用替换运算符得到一个缺省值备用。运算符替换用途${varname:-value}如果varname存在且非null,则返回其值;否则,返回value如果变量未定义,返回默认值${varname:=value}如果varname存在且非null,则返回varname的值;否则,设置varname值为value,并返回其值如果变量未定义,则设置变量为默认值${varname:?message}如果varname存在且非null,则返回它的值;否则,显示varname:message,并退出当前的命令或脚本为了捕...
2024年02月16日
292 阅读
0 评论

互动读者

标签云

最新回复

  1. tqymnonccc打酱油
    2024-09-27
  2. toibdpojay打酱油
    2024-09-22
  3. yvctxyevvw打酱油
    2024-09-22
  4. frezhwzwuq打酱油
    2024-09-22
登录
X
用户名
密码