[shell]shell编程基础知识总结

 

1、shell编程基础

1.1shell中的特殊字符

  • #:注释命令
  • &:在后台执行
  • *:匹配任意长度字符(所以乘法应转义为“/*” 
  • ?:匹配单个字符
  • []:匹配方括号中的任意一个字符
  • [!]:匹配不在方括号中的任意一个字符
  • /:转义字符
  • ;命令分隔符

1.2、输入输出重定向

  • >:输出重定向
  • >>:输出重定向,将信息追加到文件末尾
  • <:输入重定向
  • <<:实现here文件

前两个没什么好说的,下面说一下后面两个:

<输入重定向的格式为:

命令 文件名

似乎后面的“文件名”不能再为命令了。 可以用管道实现类似功能。

<<输入从定向被成为here文件,它将一对分隔符之间的正文重定向输入给命令,其格式如下:

$命令 << 分隔符
输入行
……
输入行
分隔符

另外有错误输出重定向

$命令 2 > 文件名

1.3、管道及命令组合

1.3.1、管道

管道把一个命令的输出传递给另一个命令作为输入,格式为:

命令1 | 命令2

1.3.2、命令执行次序

  • ;:按命令出现的前后顺序执行
  • &:表示在后台执行功能命令
  • &&:且,前面的命令执行成功才执行后面的命令
  • ||:或,前面的命令执行不成功才执行后面的命令

1.3.3、命令组合

shell中有两种方法可以将若干命令组合起来,使其在逻辑上成为一条命令。

  • {}:命令组在本shell内执行,不产生新的进程。
  • ():建立新的子进程来执行命令组,因此在圆括号内执行的命令不会改变父shell的变量值及工作目录 。

2shell变量

shell不支持数据类型,它将任何变量的值都看成是一串字符。但从赋值的形式上可以将变量分为四种形式:用户自定义变量、环境变量、位置变量和预定义的特殊变量。

2.1、用户自定义变量

2.1.1、变量赋值

赋值的形式为:

name=string

注意:

  1. 赋值号的两边不允许有空格
  2. 如果赋给变量的值中包含空格、制表符或换行符,应使用双引号
  3. shell把未赋值的变量看成空字符串
  4. 赋值号右边没有给出字符串时,变量的值也为空

2.1.2、变量的引用

变量赋值后,可以通过在变量名前加$来引用变量

$name

如果变量名出现在一个字符串的中间,该变量前后还有其它一些字符,为了是变量名与其前后的字符分开,需要用花括号把变量名括起来

${a}b

上式引用变量a

另外,只读变量不能用unset删除。

2.1.3、只读变量

有时我们希望在说明一个变量并对它赋值之后就不再改变它的值,这时可以将变量定义为只读变量,其语法格式如下:

readonly namelist

例如:

lonfe@lonfe-laptop:~$ a=2
lonfe@lonfe-laptop:~$ readonly a
lonfe@lonfe-laptop:~$ echo $a
2
lonfe@lonfe-laptop:~$ a=3
bash: a: 
只读变量
lonfe@lonfe-laptop:~$

2.2、环境变量

bash中可以利用env命令列出所有的环境变量值。

  • HOME:用户主目录
  • IFS:域分隔符。默认的有空格、tab和换行
  • LOGNAME:用户名,即登录时用的名字
  • MAIL:用户邮箱的存放路径
  • PATH:命令搜索路径
  • PS1:主命令提示符。普通用户默认为$,超级用户默认为#
  • PS2:次命令提示符,默认为>
  • PWD:用户当前工作目录的绝对路径。随cd命令的使用而变化
  • SHELL:默认的shell的路径
  • TERM:使用的终端类型

2.3、位置变量

2.3.1、位置变量及引用

shell执行用户的命令时,把命令的第一个字符串作为执行程序名,用$0来引用。后面字符串作为程序的参数,分别用$1-$9来引用。

2.3.2shift命令

因为只有9个位置变量,当程序的参数超过9个的时候就需要使用shell内部提供的shift命令。

shift命令的功能是将位置变量左移,格式如下:

shift [n]

2.3.3、用set命令给位置变量赋值

set命令的功能是设置各种shell选项、位置变量及列出shell变量,其格式如下:

set [选项] [参数]

不带任何选项及参数的set命令将显示shell的全部变量。

set命令中键入的参数将依次赋值给位置变量$1-$9$0不能用这种方法赋值。

另外,利用unset命令可以删除变量的值,其格式如下:

unset [选项参数

2.4、特殊变量

shell中还有一组特殊变量,这组变量由shell定义及设置,用户只能引用这些变量,但不能重新设置它们。

特殊变量说明
$#命令行上的参数个数,但不包含$0
$?命令行的退出代码,0表示成功,其它数值表示失败
$$当前运行程序的进程号
$!最后一个后台运行进程的进程号
$*命令行所有参数构成的一个字符串
$@命令行所有参数,但每个参数用引号括起来

2.5、变量的条件替换

2.5.1、设置变量默认值

${var:-value}

若变量var有非空值则取var的值;否则取value的值,var的值不变

2.5.2、改变变量的值

${var:=value}

若变量var有非空值择取var的值;否则取value的值,同时将var的值赋值为value

2.5.3、在变量已赋值时进行替换

${var:+value}

若变量var有非空值则取value的值;否则取var的值(即空值),且var的值不变

2.5.4、带错误检查的变量替换

${var:?message}

若变量var有非空值则取var的值;否则显示错误信息:varmessage

2.6、特殊字符的引用

有些字符对shell有特殊含义,当用户不需要这些字符的特殊含义时就要消除其特殊含义。消除特殊字符含义的机制称为引用或转义。

2.6.1、双引号

双引号能消除大多数字符的特殊含义,但不能消除$(美元符号)、`(反引号)和/(反斜杠)的特殊含义。

2.6.2、单引号

单引号与双引号的工作方式类似,但是单引号可以消除所有字符的特殊含义

2.6.3、反引号

反引号括起来的字符被shell解释为命令。在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。

4、算术运算及条件语句

4.1、变量的算术运算

Bash只能进行两个整数间的运算,其结果仍然为整数。要进行算术运算,需要使用expr命令或let命令。

4.1.1expr命令

expr命令的功能s是计算表达式的值。该命令将其参数看做表达算术式,它计算该表达式的值并将结果送到标准输出设备上,其语法格式如下:

expr 操作数 运算符 操作数

4.1.2let命令

letbash的内部命令,其功能与expr类似,也能计算算术表达式的值,其语法格式如下:

let 赋值表达式 [赋值表达式]

注意:

  1. let支持C语言中的大部分整数运算,可以在表达式中直接使用变量,而不需要在其前面带$符号。
  2. 当let计算表达式的值时,若最后一个表达式的结果不为0则返回0值,否则返回1值。

4.2、条件语句

条件语句test用来测试后面所给的条件表达式的真假。若为真则返回0,否则返回1。test命令的一般格式为:

test 条件表达式

或者

[ 条件表达式 ]

注意:使用方括号时,要注意在条件两边加空格。

使用test命令可以进行多种类型的条件测试,包括:字符串测试数值测试和文件状态测试。

4.2.1、字符串测试

表达式含义
sring1=string2如果字符串string1string2相等,则结果为真
string1=sring2如果字符串string1string2不相等,则结果为真
test -n string如果字符串string的长度不为0,则结果为真
test string如果字符串string的长度为0,则结果为真
test -z string如果字符串string的长度不为0,则结果为真

4.2.2、数值测试

表达式含义
int1 -eq int2如果int1等于int2,则结果为真
int1 -ne int2如果int1不等于int2,则结果为真
int1 -gt int2如果int1大于int2,则结果为真
int1 -ge int2如果int1大于等于int2,则结果为真
int1 -lt int2如果int1小于int2,则结果为真
int1 -le int2如果int1小于等于int2,则结果为真

4.2.3、文件状态测试

表达式含义
-r file如果文件存在且可读,则结果为真
-w file如果文件存在且可写,则结果为真
-x file如果文件存在且可执行,则结果为真
-f file如果文件存在且为普通文件,则结果为真
-d file如果文件存在且为目录文件,则结果为真
-z file如果文件存在且长度大于0,则结果为真

4.2.4、逻辑运算符

上述条件测试语句可以单独使用,也可以通过逻辑运算符将它们组合起来使用。

表达式含义
!expr
expr1 -a expr2
expr1 -o expr2

5、shell的控制语句

6、循环控制语句与变量作用域

7、函数

8、shell脚本的调试

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shell脚本编程是一种在Unix/Linux操作系统上进行命令行编程的技术。它通过编写一系列的命令和脚本来自动化、批处理和简化任务,提高工作效率。下面是一些关于shell脚本编程基础的内容: 首先,了解shell脚本的基本语法是很重要的。Shell脚本有许多不同的变种,如Bash、Zsh和Csh等。熟悉其中一种变种的语法规则,可以让你更有效地编写脚本。 其次,学习如何声明变量和处理输入。在shell脚本中,可以使用变量存储和访问数据,还可以使用命令行参数传递输入。了解如何正确地声明变量,并使用它们进行计算和操作,是编写有效脚本的关键。 此外,掌握条件语句和循环结构也非常重要。条件语句可以用来根据不同的条件执行不同的命令,而循环结构可以重复地执行某个命令或一系列命令。掌握这些控制结构,可以让你更好地控制脚本的执行流程。 还有,学习如何使用函数和模块化代码。函数可以将一系列命令和逻辑组织在一起,以便在需要时多次调用。模块化代码能够使脚本更易于维护和扩展。掌握如何定义和使用函数,以及如何将代码划分成多个模块,可以提高脚本的可读性和可维护性。 最后,学习如何使用常见的工具和命令,如grep、sed、awk等。这些工具可以用来处理文本和数据,进行搜索、替换、提取等操作。熟练地使用这些命令,可以在脚本中提供更多的功能和处理选项。 总结来说,shell脚本编程是一种灵活、强大的编程技术,可以帮助提高工作效率。通过学习基本语法、变量、条件语句、循环结构、函数、模块化代码和常见命令,可以掌握shell脚本编程基础知识,从而利用脚本自动化各种任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值