linux shell编程基础笔记

这篇博客详细介绍了Linux Shell编程的基础知识,包括单引号、双引号和反引号的区别,printf命令的使用,退出码的概念,各种括号的作用,如()、(())、[]、[[]]、{},字符串提取方法,数组操作,运算符类型,test命令的数值、字符串和文件测试,以及函数、输入/输出重定向和文件包含等内容。适合初学者入门。
摘要由CSDN通过智能技术生成

一.单引号,双引号和反引号的区别的区别:

1.单引号

· 由单引号括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释。

· 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

2.双引号

· 双引号里可以有变量

· 双引号里可以出现转义字符

3.反引号

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

 

· 反引号还可以嵌套使用。但需注意,嵌套使用时内层的反引号必须用反斜杠(\)将其转义。

· 反引号内部是一个独立的bash session,其声明的变量只有在内部有效.

 

· 反引号是一个老的用法,$()才是新的用法,如例程中的$(seq 10)。无论是在学习中,还是在实际工作中,$()都是被推荐的用法。

 

二.printf命令

printf 命令模仿 C 程序库(library)里的 printf() 程序。printf POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。

printf 命令的语法:   printf  format-string  [arguments...]

 

三.退出码

shell中运行的每个命令都使用退出状态码(exit status)来告诉shell它完成了处理。退出状态码是一个0~255之间的整数值,在命令结束时由命令传回shell

1 查看退出状态码
    Linux提供了$?专属变量保存上一个执行的命令的退出状态码。你可以在你运行一个命令之后查看(echo $?)。
    几个典型的退出状态码及其意义:
    0----------------命令运行成功
    1----------------通知未知错误
    2----------------误用shell命令
    126-------------命令不可执行
    127-------------没有找到命令
    128-------------无效退出参数
    128+x-----------linux信号x的严重错误
    130--------------命令通过Ctrl+C终止
    255--------------退出状态码越界
2 exit命令
    用于shell 脚本中指定退出状态码。

四.各种括号的作用()、(())、[]、[[]]、{}

1.单小括号()

(1)命令组。括号中的命令将会新开一个子shell顺序执行。

 

(2)与$配合使用,$(cmd)等价于`cmd`

(3)用于初始化数组。如:array=(a b c d)

2.双小括号(())

注意:只能用于整数运算或者比较,不能用于文件测试/字符串运算等场合

(1)整数扩展。((exp))结构扩展并计算一个算术表达式的值,此计算是整数型的计算,不支持浮点型计算。如果表达式的结果为0,那么返回的退出状态码为1,或者是"false"。如果,表达式的结果为非0,那么返回的退出状态码将为0,或者是"true"。若是逻辑判断,表达式exp为真则为1,假则为0。

 

(2)只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制)

(3)常用于算术运算比较,双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用逗号分开。 只要括号中的表达式符合C语言运算规则,比如可以直接使用for((i=0;i<5;i++)), 如果不使用双括号, 则为for i in `seq 0 4`或者for i in {0..4}。再如可以直接使用if (($i<5)), 如果不使用双括号, 则为if [ $i -lt 5 ]。

 

(4)如果要 把双小括号的运算结果返回给shell中的变量则需要在双小括号前面加入$

 

(5) 只有在双小括号中才可直接使用变量,其他括号符中都需要使用$来引用变量。

3.单中括号[ ]

(1)shell的运算符都可以用单中括号[]来表示。

(2)bash 的内部命令,[和test是等同的。

(3)条件表达式要放在方括号之间,并且变量与括号之间,及变量与运算符之间都要有空格,例如: [$a==$b] 是错误的,必须写成

[ $a == $b ]。

(4)[ ]中不可以使用&& || > < 等操作符号,需要使用[[ ]]来表示。

(5)在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号。

 

4.双中括号[[ ]]

注意:不能用于数字运算或数字比较

(1)支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。

(2)使用[[ ... ]]条件判断结构,而不是[ ... ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。

(3)bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。

(4)双中括号中可以使用&& || > < 等操作符号,但是在[ ]中是不允许的,所有的操作符号和变量或者常量间必须要有空格否则会报错。

 

五.花括号{ }

1.大括号拓展.对大括号内的文件名做扩展。在大括号中,不允许有空白,除非这个空白被引用或转义。

第一种:对大括号中的以逗号分割的文件列表进行拓展。如 touch {a,b}.txt 结果为a.txt b.txt。第二种:对大括号中以点点(..)分割的顺序文件列表起拓展作用,如:touch {a..d}.txt 结果为a.txt b.txt c.txt d.txt

 

2.几种特殊的替换结构

${var:-string},${var:+string},${var:=string},${var:?string}

(1) ${var:-string}和${var:=string}:若变量var为空,则用在命令行中用string来替换${var:-string},否则变量var不为空时,则用变量var的值来替换${var:-string};对于${var:=string}的替换规则和${var:-string}是一样的,所不同之处是${var:=string}若var为空时,用string替换${var:=string}的同时,把string赋给变量var: ${var:=string}很常用的一种用法是,判断某个变量是否赋值,没有的话则给它赋上一个默认值。
(2) ${var:+string}的替换规则和上面的相反,即只有当var不是空的时候才替换成string,若var为空时则不替换或者说是替换成变量 var的值,即空值。(因为变量var此时为空,所以这两种说法是等价的) 
(3) ${var:?string}替换规则为:若变量var不为空,则用变量var的值来替换${var:?string};若变量var为空,则把string输出到标准错误中,并从脚本中退出。我们可利用此特性来检查是否设置了变量的值。
      补充扩展:在上面这五种替换结构中string不一定是常值的,可用另外一个变量的值或是一种命令的输出。

 

六.字符串提取

${var:num},${var:num1:num2},${var/pattern/pattern},${var//pattern/pattern}

 

Ø 第一种模式:${var:num},这种模式时,shell在var中提取第num个字符到末尾的所有字符。若num为正数,从左边0处开始;若num为负数,从右边开始提取字串,但必须使用在冒号后面加空格或一个数字或整个num加上括号,如${var: -2}、${var:1-3}或${var:(-2)}。

Ø 第二种模式:${var:num1:num2},num1是位置,num2是长度。表示从$var字符串的第$num1个位置开始提取长度为$num2的子串。不能为负数。

Ø 第三种模式:${var/pattern/pattern}表示将var字符串的第一个匹配的pattern替换为另一个pattern。

Ø 第四种模式:${var//pattern/pattern}表示将var字符串中的所有能匹配的pattern替换为另一个pattern。

 

七.shell数组

1. 数组元素定义用空格分隔,而不是逗号。如:array_string=(123 124 2345)

2. 输出数组元素,采用 ${ 数组名[

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值