TypechoJoeTheme

MetMan's Blog

网站页面
搜索到 17 篇与 的结果 ———
2025-03-22

Linux实用命令whereis

Linux实用命令whereis
Linux系统有一个非常实用的查找命令工具:whereis。whereis用于快速查找标准目录中可执行文件、手册(manual)、源代码。比如查找ls命令:$ whereis ls ls: /usr/bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz前面提到的标准目录指的是:命令使用$PATH和$MANPATH环境变量内容作为默认搜索目录。可以使用-l选项列出会搜索的目录。常用选项whereis vs locate vs findwhereis查找标准目录,locate需要创建文件目录数据库,而find根据指定条件(比如文件名、文件大小、修改时间等)实时搜索文件系统。用途可用于shell脚本中查询命令是否存在。command='ls' command_path=$(whereis -b $command) if [[ $command_path != "$command:" ]] #如果找不到命令,只会显式'命令:' then echo "$command exi...
2025年03月22日
12 阅读
0 评论
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日
149 阅读
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日
246 阅读
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日
305 阅读
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日
238 阅读
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日
421 阅读
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日
190 阅读
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日
181 阅读
0 评论

互动读者

标签云

最新回复

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