shell脚本基本命令(shell命令大全)

Shell脚本是Linux开发工作中常用的工具,但是我一直没有找到一个适合自己的简明扼要的HandBook。在工作过程中整理了一下,贴在这里已备查看。

1Shell中的特殊符号

1.1$美元符号。用来表示变量的值。如变量NAME的值为Mike,则使用$NAME就可以得到“Mike”这个值。

1.2#井号。除了做为超级用户的提示符之外,还可以在脚本中做为注释的开头字母,每一行语句中,从#号开始的部分就不执行了。

1.3“”双引号。shell不会将一对双引号之间的文本中的大多数特殊字符进行解释,如#不再是注释的开头,它只表示一个井号“#”。但$仍然保持特殊含义。(在双引号中的$加变量名,即:$PARAM_NAME,依然会转换成变量的值。)

1.3.1双引号对于某些特殊符号是不起作用的,例如:”,$,\,`(反引号)

1.3.2双引号和单引号不能嵌套。即:echo‘””’输出””,echo“’’”输出’’

1.4‘’单引号。shell不会将一对单引号之间的任何字符做特殊解释。(在双引号中的$加变量名,即:$PARAM_NAME,不会转换成变量的值。)

1.4.1echo“$HOME”(结果:/home/xiongguoan)

1.5“倒引号。命令替换。在倒引号内部的shell命令首先被执行,其结果输出代替用倒引号括起来的文本,不过特殊字符会被shell解释。

1.5.1echo‘$HOME’(结果:$HOME)

1.6\斜杠。用来去掉在shell解释中字符的特殊含义。在文本中,跟在\后面的一个字符不会被shell特殊解释,但其余的不受影响。

1.7[]中括号,主要是用来测试条件的,通常放在if语句的后面。(不过还是不太明白),但是中括号本身不会在测试语句执行后消失。

1.7.1echo[$HOME](结果:出现错误)

1.7.2echo[$HOME](结果:[/home/xiongguoan])(注意:HOME后面有空格哦。)

1.7.3echo[$HOME–eq‘/xiong’](结果:[/home/xiongguoan–eq/xiong])

1.8{}大括号,主要是和$符号配合,作为字符串连接来使用

1.8.1echo${HOME}ismydir(结果:/home/xiongguoanismydir)

2预定义的变量

2.1特殊变量

$shell变量名的开始,如$var

|管道,将标准输出转到下一个命令的标准输入

$#记录传递给Shell的自变量个数

#注释开始

&在后台执行一个进程

?匹配一个字符

*匹配0到多个字符(与DOS不同,可在文件名中间使用,并且含.)

$-使用set及执行时传递给shell的标志位

$!最后一个子进程的进程号

$?取最近一次命令执行后的退出状态(返回码)

$*传递给shellscript的参数

$@所有参数,个别的用双引号括起来

$0当前shell的名字

$n(n:1-)位置参数

$$进程标识号(ProcessIdentifierNumber,PID)
图片[1]-shell脚本基本命令(shell命令大全)-小白之家

>输出重定向

<输入重定向

>>输出重定向(追加方式)

[]列出字符变化范围,如[a-z]

2.2代值变量

*任意字符串

?一个任意字符

[abc]a,b,c三者中之一

[a-n]从a到n的任一字符

2.3特殊字符的表达

\b退回

\c打印一行时没有换行符这个我们经常会用到

\f换页

\r回车

\t制表

\v垂直制表

\\反斜线本身

2.4其他字符

2.4.1分号

;表示一行结束

2.4.2圆括号

()表示在新的子shell中执行括号内的命令(这样可以不改变当前shell的状态。)

但是圆括号在单/双引号内失去作用,只作为普通字符。

2.4.3花括号

2.4.3.1分割命令的用法

与圆括号相似,但是:1.花括号内的命令在当前shell中执行;2.花括号必须作为命令的第一个字符出现。

2.4.3.2引用变量的用法

在$后面,表示变量名的开始和结束

2.4.4方括号

相当与test命令,用来执行测试条件,通常用在需要判断条件的语句后面,例如:if,while等等。

3设置变量

3.1格式:VARNAME=value(i.e.PARAM=’hello’)

3.2注意:

3.2.1等号的前后不能有空格

3.2.2如果变量的值是一个命令的执行结果,请加上反引号(`)。

4引用变量

4.1$VARNAME

4.1.1e.i.echo$HOME(结果:/home/xiongguoan)

4.2变量默认值

4.2.1在引用一个变量的时候可以设定默认值。如果在此之前,该变量已经设定了值,则此默认值无效。如果此时变量没有被设定值,则使用此默认值(但是没有改变此变量的值)。

4.2.2echoHello${UNAME:-there}#其中there是UNAME的默认值

4.2.3其他关于默认值与判读变量的方法:,shell命令大全,新建一个后缀名为.sh的文件就可以开启shell脚本之旅了

shell脚本的首行要这样写:#!/usr/bin/bash

或者可以写成:#!/usr/bin/envbash

#!/usr/bin/envbash的

优点:

1.用户不需要去寻找程序在系统中的位置(因为在不同的系统,命令或程序存放的位置可能不同),只要程序在你的$PATH中;

2.它会根据你的环境寻找并运行默认的版本,提供灵活性。(保存用户信息的文件/etc/passwd)

缺点:

有可能在一个多用户的系统中,别人在你的$PATH中放置了一个bash,可能出现错误。

大部分情况下,/usr/bin/env是优先选择的,因为它提供了灵活性,特别是你想在不同的版本下运行这个脚本;而指定具体位置的方式#!/usr/bin/bash,在某些情况下更安全,因为它限制了代码注入的可能。

常用命令

1.echo

echo是比较常用的shell脚本的命令,用来输出一段字符串

#!/bin/bash

echo”HelloWorld!”

2.eval

eval可以用来执行一段linux命令,用shell脚本来执行Linux

命令,eval不可或缺

比如:用脚本来实现监测服务器上服务的运行状态

应用实例

我做的这个功能不仅要进行监测,还要去判断当前服务器的操作系统类型,根据不同的操作系统执行相应的linux命令,因为不同系统能使用的Linux命令也不同,项目在不同系统上的服务名称都不一样,这个功能调用公司写好的一个方法就可以实现了,我就只拿出监测服务器上的服务运行状态,如果服务未启动或异常关闭,自动重新启动的一个脚本(需要设定定时任务来定时运行这个脚本来监测)

#!/usr/bin/envbash

result=$(eval”systemctlstatusrabbitmq-server.service”)

active=”active(running)”

if[[$result==*$active*]]

then

echo”rabbitmqhasstarted”

else

eval”systemctlstartrabbitmq-server.service”

echo”rabbitmqstartsucceed”

fi

这段代码对于初学者来说就可以说明很多脚本的常见写法了
图片[2]-shell脚本基本命令(shell命令大全)-小白之家

1.$

$用来取值,这里要注意,需要取的是执行命令后的返回结果,需要加上括号

2.ifelse

这里的ifelse用来做判断,需要注意的是在判断条件中的==两边都要有空格,如果没有空格会导致判断结果一直为true,这里又涉及到了判断一个字符串是否包含另一个字符串,方式有很多,这里不过多介绍,就说以下这三种:

a.用字符串运算符

strA=”chenglong”

strB=”eng”

if[[$strA=~$strB]]

then

echo”包含”

else

echo”不包含”

fi

b.用通配符*,也就是上面例子中用到的方式

A=”chenglong”

B=”eng”

if[[$A==*$B*]]

then

echo”包含”

else

echo”不包含”

fi

c.用casein语句

thisString=”abcde”#源字符串

searchString=”ab”#搜索字符串

case$thisStringin

*”$searchString”*)echoEnemySpot;;

*)echonope;;

esa

3.sed-i

sed命令的语法有很多种,我这次只用到了sed-i,就先只介绍这一种吧

sed-i就是用来操作文本文件的

sed-i’s/原字符串/新字符串/’/opt/test.txt

sed-i’s/原字符串/新字符串/g’/opt/test.txt

1

2

这是test.txt文件的内容:

#cattest.txt

s

ssss

这是执行这两条命令的结果

sed-i’s/d/886/’/opt/test.txt

执行结果

886

886sss

sed-i’s/d/886/g’/opt/test.txt

执行结果

886

886886886886

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论