TypechoJoeTheme

MetMan's Blog

网站页面
搜索到 14 篇与 的结果 ———
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日
37 阅读
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日
104 阅读
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日
122 阅读
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日
91 阅读
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日
102 阅读
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日
151 阅读
0 评论
2024-02-16

Shell变量

Shell变量
Shell简介Shell作为一种“胶水”语言,主要目的是将系统中各种工具粘合在一起,其主要功能是方便的调用各种系统命令。为了这一目的,shell被设计成“面向字符串”的语言,即一切皆字符串。(这有点像Unix设计哲学:一切皆文件)刚接触shell编程时会认为shell脚本只是用来将各种系统命令放在一起组合执行。但shell实际上是一门编程语言,编程语言具有的特点它一般也都有。shell编程学习分为两部分:shell语法变量、逻辑判断与循环流程控制、函数等语法要素齐全。Unix/Linux系统命令系统命令可以看作C语言中的标准库,让用户能够更便捷的完成任务。但需要注意的是,C是编译型语言,而shell是解释型语言。变量Shell主要是字符串处理语言,当然它也提供一些简单的算术预算功能(功能比较弱)。不同于编译型语言(如C、Fortran),shell是脚本型语言,不需要变量类型声明。直接var=value这样变量名赋值,变量类型为字符串。也可以通过一些方法声明为数组。变量声明与引用Shell变量名称的开头是一个字母或下划线符号,后面接任意长度字母、数字或下划线(与C语言定义类似)。...
2024年02月16日
222 阅读
0 评论
2024-02-02

Shell退出状态和test命令(二)

Shell退出状态和test命令(二)
test命令可执行的命令执行会有退出状态,如果想对文件属性/字符串比较/数值大小关系比较进行测试操作获得退出状态呢?我们可以通过test命令进行以上测试。test命令执行结果是其参数比较的退出状态。基本语法:test 表达式 [ 表达式 ]test命令的等价用法是[ ],一般我们都喜欢后一种用法。几种常用的测试:文件属性测试表达式测试为真-d filefile是目录-e filefile存在-f filefile为一般文件示例:$ test -d TMP $ echo $? 0 $ [ -f foo ] 1字符串测试表达式测试为真-n stringstring是非null-z stringstring是nulls1 = s2字符串s1与s2相同s1 != s2字符串s1与s2不同示例:$ var=hello $ test -n "$var" #字符串非空 $ echo $? 0 $ test -n "$var1" #空字符串 $ echo $? 1 $ test -z "$var1" $ echo $? 0数字比较测...
2024年02月02日
148 阅读
0 评论

互动读者

标签云

最新回复

暂无回复

登录
X
用户名
密码