shell脚本常用命令(HandBook_1)

Posted 李杰然

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本常用命令(HandBook_1)相关的知识,希望对你有一定的参考价值。

shell及其他解释型语言的一般格式?

 #!/bin/bash            #shell脚本的首行格式
 #!/usr/bin/python  #python脚本的格式
 #!/usr/bin/perl        #perl脚本的格式
 #Description:      #"#"开头的单个井字号是注释符,其后内容不当做脚本程序执行
 COMMAND            #脚本的编程内容部分,命令的堆砌,单一命令的组合完成复杂任务

怎样使得定义的变量生效?

1.~]# . /etc/profile        # 点后跟定义变量文件
2.~]# source /etc/profile   #直接在当前shell生效

什么是位置变量?

 用来描述参数位置的变量.
 $0:代表脚本本身的名字
 $1:脚本的第一个参数
 $2:脚本的第二个参数
 ...
 ${10}:脚本的第10个参数    #注:从第十个开始以后要加大括号
 $*:脚本所有参数,以一个整体字符串存储
 [email protected]:脚本所有参数,以单个参数作为一个整体存储
 $#:脚本所有参数的总个数

如何定义一个变量?

1.declare -i        #定义整型
        -x      #定义环境
        -r      #只读变量
2.export variable=expression #定义环境变量

变量如何引用?

1.$variable     #$后跟变量名
2.${variable}   #可加大括号

如何在脚本中调用命令的执行结果?

1.$(command)    #命令的执行结果可赋值给变量
2.`command`     #反引号同样是命令的执行结果

怎样得知系统定义了哪些变量?

1.set           #查看系统定义的所有变量
2.env/printenv  #查看定义的所有环境变量

该怎样取消一已定义好的变量?

1.unset variable#取消或者删除变量
  注:variable=   #变量赋值为空不等同于变量被取消

查看bashell的版本?

echo $BASH_VERSION

几个常见的环境变量:

MAIL:存储mail文件
MAILCHECK:隔多长时间巡检一次并发送mail
SHLVL:当前处于多少层shell
RANDOM:软件模拟实现随机数变量

1           Shell中的特殊符号

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.1     echo “$HOME”    (结果:/home/xiongguoan)

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

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

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

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

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

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

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

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

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

2           预定义的变量

2.1          特殊变量

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

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

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

#      注释开始

&      在后台执行一个进程

?     匹配一个字符

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

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

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

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

$*     传递给shell script的参数

[email protected]     所有参数,个别的用双引号括起来

$0     当前shell的名字

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

$$     进程标识号(Process Identifier Number, PID)

>      输出重定向

  <      输入重定向

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

  []     列出字符变化范围,如[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.1     e.i.  echo $HOME   (结果:/home/xiongguoan)

4.2          变量默认值

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

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

4.2.3     其他关于默认值与判读变量的方法:

利用大括号表示变量替换

表示形式

说明

${VARIABLE}

基本变量替换。大括号限定变量名的开始和结束

${VARIABLE:-DEFAULT}

如果VARIABLE没有值,则这种表示形式返回DEFAULT的值

${VARIABLE:=DEFAULT}

如果VARIABLE没有值,则这种表达形式返回DEFAULT的值。另外,如果VARIABLE没有设置,则把DEFAULT的值赋予它

${VARIABLE:+VALUE}

如果VARIABLE被设置,则这种表示形式返回VALUE;否则,返回一个空串

${# VARIABLE}

这种表示形式返回VARIABLE值的长度,除非VARIABLE是* 或者@在为*或者@的特殊情况下,则返回[email protected]所表示的元素的个数。要记住,$ @保存传给该脚本的参数清单

${VARIABLE:?MESSAGE}

如果VARIABLE没有值,则这种表示形式返回MESSAGE的值。Shell也显示出VARIABLE的名字,所以这种形式对捕获得错误很有用

4.2.4     注意:

4.2.4.1    使用${VALIABLE:?MESSAGE},如果发现此变量此时没有值,则脚本停止运行并显示行号和变量名称。 主要用于调试。

4.2.4.2     

5           位置变量

5.1          使用$1,$2,$3…$9,${10},${11}…来代表输入的参数。其中$0代表被执行的命令或者脚本的名字。$1,$2…代表输入的第1,2…个参数

5.2          例子:

# cat count.sh#!/bin/sh

A=$1             # 将位置$1的数值读入,并赋给变量A

B=$2             # 将位置$2的数值读入,并赋给变量B

C=$[$A+$B]       # 将变量A与B的值相加,将结果赋给C

echo $C          # 显示C的数值

结果:

# ./count.sh  3  6

9

# ./count.sh 34  28

62

5.3          [email protected]和$*代表参数的列表,$#代表参数的数量 (不知道[email protected]和$*之间的差别)

6           运算符和优先级

Shell运算符和它们的优先级顺序

级别

运算符

说明

13

-, +

单目负、单目正

12

!, ~

逻辑非、按位取反或补码

11

* , / , %

乘、除、取模

10

+, -

加、减

9

<< , >>

按位左移、按位右移

8

< =, > =,  < , >

小于或等于、大于或等于、小于、大于

7

= = , ! =

等于、不等于

6

&

按位与

5

^

按位异或

4

 |

按位或

3

&&

逻辑与

2

| |

逻辑或

1

=, + =, - =, * =, /=, % =, & =, ^ =, | =, << =, >> =

赋值、运算且赋值

   









以上是关于shell脚本常用命令(HandBook_1)的主要内容,如果未能解决你的问题,请参考以下文章

shell 脚本 常用命令

Bash基础——Shell脚本内部常用环境变量

shell脚本简介及常用文本编辑命令

shell脚本常用命令汇总

Shell脚本常用命令

shell编程--常用变量及表达式