Shell技巧
Shell编程技巧性展示
乐大师
这个作者很懒,什么都没留下…
展开
-
shell脚本受限执行
shell 中运行的脚本或脚本的个代码断会禁用一些正常 shell 中可以执行的命令.原创 2022-12-04 12:30:33 · 735 阅读 · 0 评论 -
shell中通配符的使用
shell中的通配符与正则表达式是不同的两种功能。正则表达式一般不会在bash直接应用,需要使用sed、grep、awk来解释正则表达式。通配符则可以通过bash直接解释,一般用作名称展开。原创 2022-11-16 12:05:25 · 1344 阅读 · 0 评论 -
Shell中的正则表达式
一个正式表达式是一个字符串.字符串里的字符被称为元字符。正则表达式是一个字符或/和元字符组合成的字符集,它们匹配(或指定)一个模式.。原创 2022-11-14 21:43:07 · 233 阅读 · 0 评论 -
shell重定向小结
1.命令输出 > 文件名将命令的输出信息写入到指定文件2. :> 文件名把指定的文件断为0长度。如果文件不存在,则传进一个0长度的文件。原创 2022-10-25 13:09:05 · 714 阅读 · 0 评论 -
shell小技巧(一百三十五)打包指定目录下所用文件,每个文件单独打包
运行脚本,需要指定一个目录作为参数。脚本将会对该目录下所有文件单独打包。原创 2022-08-09 11:54:02 · 2858 阅读 · 0 评论 -
shell小技巧(一百三十四)简单的键盘输入记录器
运行脚本,提示输入4个字符。输入过程中,未达到4个字符之前五显示。输入第4个字符后,自动显示输入的4个字符。原创 2022-06-24 10:13:15 · 468 阅读 · 0 评论 -
shell小技巧(一百三十三)n个人报数出局游戏
n个人站一个圆圈,依次报数。规定数到m的人退出圈子,下一个人从头开始报数。往复循环直到所有人退出圈子。代码如下,n代表人数,m代表报数出圈的数字。数组代表人,每个人有一个标记,即数组的角标。出圈时,输出角标。#!/bin/bashif [ -z $1 ]; then echo "Please input 2 numbers!" exit 1else echo "Checking..."fiif [ -z $2 ]; then echo "Check error! ...原创 2022-03-06 18:20:33 · 3933 阅读 · 0 评论 -
shell小技巧(一百三十二)同名的命令的执行
在现实中,一个Linux系统内,有可能存在两个名称相同的命令。这可能是后辈重写了一个功能相同的命令,也可能是功能不同,但是名称巧合了。在这种情况下,操作者要准确执行你想要的命令就需要特别注意技巧。有人说,我用全路径来执行就好啦,或者用cd进入到那个命令所在的目录再执行。这种说法在某些情况下确实有效,有时候无效。比如:一个命令跟系统中的内建命令或者是别名相同,那么该怎么办?这里做一个实验。在/usr/local/bin/下创建一个脚本,名字为“ll”。大家很熟悉这个名字吧,在C原创 2022-01-29 16:30:03 · 1952 阅读 · 0 评论 -
Shell小技巧(一百三十一)服务器tcp连接数实时统计
hell小技巧(一百三十)原创 2022-01-11 14:09:55 · 2244 阅读 · 0 评论 -
Shell小技巧(一百三十)替换脚本传入参数的值
本例以3个参数传入运行,运行中替换掉三个传入参数值。代码:#!/bin/bash#以下输出输入的第1-3个参数echo "first: $1 "echo "second: $2 "echo "third: $3 "set `uname -a`echo $_ #输出最后一个输出值echo "field #1 of 'uname -a' = $1" #查看第一个参数当前值echo "field #2 of 'uname -a' = $2"#查看第二个参数当前值echo ...原创 2021-09-12 12:22:33 · 499 阅读 · 0 评论 -
Shell小技巧(一百二十九)for循环小结
for循环语法:for 变量 in 数组do...done例1:#!/bin/bashfor adoecho $adonenumber="9 7 5 3 1"for i in `echo $number`do echo $idone本例中使用echo输出变量number作为数组,其内容是带有空格分割的一组整数。运行结果:下面这个例子,在前例基础上稍加变化。例2:[root@c7a-1 scripts]# cat s133.sh#...原创 2021-08-03 21:10:55 · 385 阅读 · 0 评论 -
Shell小技巧(一百二十八)declear定义变量详解
定义只读变量语法:declare-r 变量名定义整数型变量语法:declare -i 变量名定义整数型后,该变量可以不使用let关键字,在等式内进行数学计算。例子:定义数组语法:declare -a 数组名定义函数语法:declare -f 函数这个语法还有个特殊用途,输出之前定义的函数。如图,使用declare -f输出了f1和f2两个函数的定义。使用了declare命令,还有一个特殊作用,即限制了变量的作用域。如图,例.原创 2021-07-29 15:14:02 · 2521 阅读 · 0 评论 -
Shell小技巧(一百二十七)操作字符串技巧(再续)
1.变量未初始化时${变量名-缺省值}${变量名:-缺省值}先看例子:当初始化变量为空,那么形式1输出为空,不会输出设置的缺省值。当未初始化变量,那么形式1输出缺省值。当未初始化变量或初始化未空,那么形式2输出缺省值。这种方法可以使用在脚本输入变量上,形式如下:${数字:-缺省值}例子:${1:-abc}下面的语法效果跟上面的刚好相反:${变量名+缺省值}${变量名:+缺省值}例子:当变量初始化后,无论是否为空,都输出缺省值。...原创 2021-07-19 15:15:53 · 171 阅读 · 0 评论 -
Shell小技巧(一百二十六)操作字符串技巧(续)
1.截掉部分字串截掉左边第一个匹配到的字串${string#匹配字串} #支持正则表达式,string为变量名截掉左边最后一个匹配到的字串${string##匹配字串} #支持正则表达式,string为变量名例子:例子中,第一条匹配到第一个大写字母A,第二条匹配到最后一个大写字母C截掉右边第一个匹配到的字串${string%匹配字串} #支持正则表达式,string为变量名截掉右边最后一个匹配到的字串${string%匹配字串} #支持正则表达式,string原创 2021-07-16 17:01:13 · 330 阅读 · 0 评论 -
Shell小技巧(一百二十五)操作字符串技巧
1.字符串长度方法1:${#变量名}方法2: expr length $变量名方法3: expr "$变量名" : '.*'例子:2.匹配字符串并输出所在位置方法1: expr match "$变量名" '正则表达式'方法2:expr "$变量名" : '正则表达式'3.匹配字串第一个字符,返回位置expr index $变量名 字串例子:4.提取字符串${变量名:开始位置}${变量名:开始位置:长度}例子:注意,...原创 2021-07-15 21:30:34 · 127 阅读 · 0 评论 -
Shell小技巧(一百二十四)内部变量5
$_之前执行命令的最后一个参数。第一条命令“ls -l” 有一个参数“-l”。第二条命令“pwd”不包含参数,$_保存的是命令本身。$?命令,函数或者脚本本身退出的状态。第一个$?输出0,代表脚本之前运行结果状态。第二个$?输出0,代表执行一个pwd运行结果状态。第三个$?输出127,代表运行一个命令不存在。第四个$?输出127,代表运行一个不存在的函数。如果函数x定义放在运行x的前面,则会输出0.$$脚本自身的进程ID...原创 2021-07-14 11:44:31 · 112 阅读 · 0 评论 -
Shell小技巧(一百二十三)内部变量4
$SECONDE脚本运行的时间。例子:$SHELLOPTS这是只读变量,不允许修改。变量保存shell允许的选项$SHLVL是shell level的缩写,直接意思就是shell层次。如果是命令行,值为1,脚本值为2$TMOUT当这个变量值大于0时,那么再过了这个指定的时间之后(即设置了长时间不操作最大时间),shell将执行logout。这个很有用,建议设置600(秒)。可以/etc/profile中设置,也可以在/etc/bashrc中设置。原创 2021-07-12 15:15:07 · 224 阅读 · 0 评论 -
Shell小技巧(一百二十二)内部变量3
$PPID一个进程的$PPID就是他的父进程的进程id$PROMPT_COMMAND这个变量保存一个在主提示符($PS1)显示直线需要执行的命令。$PS1主提示符。$PS2第2提示符,当你需要额外的输入的时候将会显示,默认为“>”$PS3第3提示符,在一个select循环中显示$PS4第4提示符,当使用-x选项调用脚本时,这个提示符将出现在每行的输出前面。$PWD当前所在目录,与pwd命令作用相同$REPLYread命令如果没有给变量原创 2021-07-11 20:08:06 · 246 阅读 · 0 评论 -
Shell小技巧(一百二十一)内部变量2
$PIPESTATUS这是个数组变量,将保存最后一个运行的前台管道的退出码。这个退出码和最后一个命令运行的退出码不一定相同。例子:$PIPESTATUS数组的每个成员保存一个管道命令的退出码,${PIPESTATUS[0]}保存第一个管道命令的退出码,${PIPESTATUS[1]}保存第二个管道命令的退出码,以此类推。例子:第二组命令中,第二个命令执行结果为空,输出退出码1如果是一个错误命令,那么输出如下:...原创 2021-07-08 17:41:15 · 284 阅读 · 0 评论 -
Shell小技巧(一百二十)内部变量1
Shell有数量众多的内部变量。$BASHBASH的二进制执行文件的位置。$BASH_VERSIONBASH版本号$FUNCNAME当前函数名字$GROUPS当前用户所属组$HOME当前用户的家目录$HOSTNAME主机名$IFS内部域分隔符,默认为空白,但是可以修改例如:IFS=:分隔符修改为“:”$LINENO记录这个变量所在行号。$OLDPWD之前的工作目录...原创 2021-07-06 20:57:53 · 104 阅读 · 0 评论 -
Shell小技巧(一百一十九)混合状态的test
这里给出一个典型的例子,即if语句中多个逻辑条件判断。例1:以下是一种正确的写法:a=24b=47if [ "$a" -eq 24 ] && [ "$b" -eq 47 ]thenecho 1elseecho 2fi运行结果将输出1例2:以下则是错误的写法:a=24b=47if [ "$a" -eq 24 && "$b" -eq 47 ]thenecho 1elseecho 2fi例3:如果希望在一对“[...原创 2021-07-04 19:37:13 · 106 阅读 · 0 评论 -
Shell小技巧(一百一十八)shell实现加法的6中形式
代码:#!/bin/bashn=0: $[ n = $n + 1 ]echo $nn=$[ $n + 1 ]echo $nn=$(( $n + 1 ))echo $nlet "n++"echo $n(( n++ ))echo $n: $(( n = $n + 1))echo $n一共6可进行数学加法计算形式,利用let关键字、“[ ... ]”、“((...))”...原创 2021-07-04 10:07:18 · 2076 阅读 · 0 评论 -
Shell小技巧(一百一十七)计算两个数的最大公约数
代码:#!/bin/bashgetmaxgy(){dividend=$1divisor=$2remainder=1until [ "$remainder" -eq 0 ]do let "remainder = $dividend % $divisor" dividend=$divisor divisor=$remainderdone}getmaxgy$1 $2echoecho "max gongyueof $1 and $2 = $divide...原创 2021-07-03 20:29:50 · 469 阅读 · 0 评论 -
Shell小技巧(一百一十六)字符串测试的一个小问题
上一段代码:#!/bin/bashif [ -n $string1 ]thenecho "It is not null"elseecho "This is null"fi#exit 0echo "--------------------------"string=""if [ -n "$string1" ]thenecho "It is not null"elseecho "This is null"fiecho "**************************"原创 2021-07-03 13:58:38 · 91 阅读 · 0 评论 -
Shell小技巧(一百一十五)做比较小结
1.数字比较数字比较比较好理解,基本上就是数值大小比较。比较 操作符:-eq 等于-le 小于等于-ge 大于等于-gt 大于-lt 小于-ne 不等于例如:[ 1 -eq 1][ 2-ge 1][ 3-gt 1 ]...其实我们比较熟悉的“>”“<”“>=”“<=”“==”也是可以使用的,不过需要使用“((...))”例如:if (( 2 >= 1))if (( 1== 1))i...原创 2021-07-02 14:22:24 · 160 阅读 · 0 评论 -
Shell小技巧(一百一十五)找出所有损坏的链接文件
功能要求:脚本运行,接收参数作为查找路径;路径可以是一个或者多个。如果没有带参数执行,则以当前路径作为查找路径。当前路径下所有文件以及子路径下所有文件判断是否是有效的链接文件,如果是无效的链接文件则输出。代码:#!/bin/bash[ $# -eq 0 ] && directorys=`pwd` || directorys=$@ #判断是否有参数,没有则获得前路径linkchk() { #检查链接文件的函数,可以递归执行 for element in ...原创 2021-07-01 14:09:10 · 369 阅读 · 0 评论 -
Shell小技巧(一百一十四)关于tests
test命令位于/usr/bin下格式:/usr/bin/test 表达式其执行后返回表达式逻辑结果,即true或false其典型应用是在if分支中使用。例如:if /usr/bin/test -z "$a"其实 /usr/bin/test是可以省略的,上面的语句和相面的等价:if [ -z "$a" ]还有一种等价形式如下:if /usr/bin/test [ -z "$a" ]另外,使用"[[ ... ]]"替代"[ ... ]"剋组织脚本中许多逻辑错误。原创 2021-06-30 16:48:49 · 235 阅读 · 0 评论 -
Shell小技巧(一百一十叁)退出状态
每个命令都会返回一个退出状态。脚本也一样,也可以在结束的时候返回一个状态值。如果返回值为0,代表成功;返回一个非零值,通常会被认为是一个错误代码。这个非零值错误代码必须是1-255的十进制整数。在shell脚本中,使用命令exit给脚本退出返回一个状态值。格式:exit n (n为0-255)可以根据实际情况返回对应的代码值。一个常见的小技巧,使用脚本中最后一个命令的执行结果作为脚本退出后的执行结果。例如:#!/bin/bashecho helloecho $? #上原创 2021-06-28 14:54:18 · 496 阅读 · 0 评论 -
Shell小技巧(一百一十贰)特殊字符“\”-转义小结
在各种编程语言中,一般都存在使用特殊字符组合来表达特殊的含义。其中大部分都适用“\”作为转换字符含义的操作符。Shell中也使用“\”,我们称其为转义。在echo和sed使用的一些转义组合如下:\n 换行\r 回车\t tab制表符\v 垂直tab\xxx 八进制ASCII解码,x代表数字\xyy 十六进制,y代表数字一个八进制例子如下:echo '\t \x42 \t'echo'\x42'常见的转义组合:...原创 2021-06-24 17:18:19 · 5017 阅读 · 2 评论 -
Shell小技巧(一百一十一)变量小结(补充)
之前写过一篇关于变量的总结文章,其内容还是有些遗漏,作此篇文章补充。1.关于赋值赋值有一种形式是将一个命令结果赋给变量。例如:a=`ls -l`如果是写在脚本里执行,不会有什么问题。但是如果是直接命令行执行,则有一种特殊情况。即如果包含“!”那么会报错。例如:2.关于引用变量引用以下2种形式会略有区别。a=`ls -l`echo $aechoecho "$a"echo "$a"将会保留空白部分(包括换行)3.关于脚本参数变量下面这个脚本原创 2021-06-23 14:45:42 · 118 阅读 · 0 评论 -
Shell小技巧(一百一十一)特殊字符“~”、“&”
单个“~”代表当前用户的$HOME变量,即家目录“~+”组合代表当前工作目录,相当于$PWD""原创 2021-06-21 17:45:01 · 1089 阅读 · 0 评论 -
Shell小技巧(一百一十)特殊字符“<”、“<<”、“<<<”
shell中“<”是重定向,将从“<”右侧读取的内容输出到“<”左侧。一般形式如下:command原创 2021-06-18 15:06:09 · 3837 阅读 · 0 评论 -
Shell小技巧(一百零九)组合键总结
Ctl+u 删除光标到行首的所有字符Ctl+c 终止前台工作Ctl+j 换行Ctl+k 删除当前光标到本行尾部的字符Ctl+w 删除当前光标到前边的最近一个空格之间的字符Ctl+d 相当于exit,从当前shell登出Ctl+b 光标后退,只是移动光标不删除字符Ctl+h 删除光标前边的字符,一次操作删除一个Ctl+l 清屏,如果当前行输入了内容,此时使用本组合键,本行未执行的内容不清Ctl+m 跟Ctl+j类似,回车Ctl+s 挂起,输入本...原创 2021-05-27 17:45:00 · 282 阅读 · 0 评论 -
Shell小技巧(一百零八)特殊字符“-”和“+”
1.算术符号例如: let a=5+2-12.重定向“-”有些时候可以起重定向作用。Shell小技巧(一百零七)中方法2中的“-”就是起到了重定向作用。3.特定命令用于打开选项、关闭选项例如:chmod +x t1.sh #给t1.sh文件增加执行权限chmod -x t1.sh #给t1.sh文件移除执行权限4.“-”用于命令选项前缀例如:find .-mtime -1 -type f #查找当前目录下,1天内修改过的文件5.“-”使...原创 2021-05-27 16:22:19 · 974 阅读 · 0 评论 -
Shell小技巧(一百零七)复制一个目录下所有文件和文件夹到目标目录
假定源目录是/a,目标目录是/b方法1:cp -a /a/* /b方法2:(cd /a && tar cf - .)| (cd /b && tar xpvf -)简要说明:cd /a && tar cf - . 进入a目录,如果成功tar在当前目录创建文件,直接输出给标准输出| (cd /b && tar xpvf -) 通过管道接收标准输出的内容,进入目录,如果成功,执行tar命令,解包并保留属性,数据来源从辨..原创 2021-05-26 17:50:48 · 2608 阅读 · 0 评论 -
Shell小技巧(一百零六)变量小结
1.变量赋值 变量赋值使用“=”,“=”左右皆不可以有空格,形式如下: a=1 #赋值1给变量a a=1+2 #赋值1+2的结果给变量a a+=1 b=abc #赋值字符串abc给变量b b=“abc” #赋值字符串abc给变量b b='abc'#赋值字符串abc给变量b c=$(ls) #ls运行结果作为字符串赋值给变量c c=`ls`#ls运行结果作为字符串赋值给变量c for d in 3 4 5 6 ...原创 2021-05-26 14:53:12 · 160 阅读 · 0 评论 -
Shell小技巧(一百零五)脚本中的空格小结
1.通过空格可以实现同一行内给多个变量赋值例如:var1=1 var2=2 var3=32.变量中含有空格时,可能输出结果大相径庭例如:x="a b c d f"echo $xecho "$x"从结果中看出,第一种形式字符中间不管含有多少个空格,输出时只输出一个空格;第二种形式则是按变量内实际空格数量输出。3.变量赋值时如果有空格例如:var1=1var2= 2var3 =3var4 = 4从结果看,第二种形式中...原创 2021-05-19 16:56:00 · 1119 阅读 · 0 评论 -
Shell小技巧(一百零三)特殊字符“()”“(())”
“()”第一种作用:初始化数组例如:Array=("a" "b" "c" "d")echo ${Array[3]}输出结果:d第二种作用:命令替换。当发现“$(cmd)”结构,会将cmd执行一次,得到其标准输出再放回原来的命令中。例如:x=$(ls -l)echo $x输出结果:当前目录执行ls -l命令可以运行多个命令,命令之间用“;”分隔“(())”第一种作用:用于重定义变量例如:a=6((a++))echo $a输出结果:7.原创 2021-05-12 17:51:47 · 1565 阅读 · 0 评论 -
Shell小技巧(一百零二)特殊字符“[]”和“[[]]”
“[]”第一种作用:表示数组的元素例如:Array[1]=xecho ${Array[1]}第二种作用:在if判断语句中,将条件表达式包括在其中例如:if [ $x -eq 1] ; then echo "ok"fi第三种作用:在正则表达式中,当字符匹配的一个范围时,使用其将范围包括其中例如:[a-zA-z] 表示匹配全部英文大小写字母“[[]]”第一种作用:在if判断语句中,将条件表达式包括在其中。双中括号可以放置脚本中许多逻辑错误...原创 2021-05-12 17:16:35 · 502 阅读 · 0 评论 -
Shell小技巧(一百零一)Shell特殊字符“?”“$”“{}”
问号-“?”第一个作用是也是匹配字符,跟“*”不一样的是“?”只匹配1个字符。另一个作用就是测试操作。例如:$? 获取文件执行或者命令执行的返回状态值返回0是正常。非零是异常。“$”第一个作用是表示变量。例如:$a 名为a的变量${a} 名为a的变量,大多数情况{}可省略,但是这种写法更加明确,推荐使用。${}配合还可以完成参数替换。配合其他字符,表示特殊参数例如:$@$*...原创 2021-03-29 15:14:28 · 2710 阅读 · 2 评论