shell入门

3 篇文章 0 订阅

概述

Linux的shell有很多种类,常见的有以下几种:

  • Bourne Shell(/usr/bin/sh或/bin/sh)
  • Bourne Again Shell(/bin/bash)
  • C Shell(/usr/bin/csh)
  • K Shell(/usr/bin/ksh)
  • Shell for Root(/sbin/sh)

其中 Bourne Again Shell又叫做bash,是应用的最多同时也是Linux系统默认使用的shell。

注意:一般情况下并不区分Bourne Shell和Bourne Again Shell,也就是说像 #!/bin/sh,同样也可以改为 #!/bin/bash。

#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序,也就是指定使用哪种shell来解释此脚本。

第一个shell脚本

新建一个脚本文件,如test.sh,其中后缀.sh只是为了见名知意,可以改成任何其他的名字,如之间省略只用test也可以。因为真正执行脚本的只跟它的第一行也就是#!xxx有关。

有两种运行shell脚本的方式,一种是直接在当前路径下执行./test,一种是在当前路径下指定解释器来执行,如/bin/sh test。其中第二种方式不需要在文件的第一行指定解释器信息,写了也没用。

shell变量

定义变量

定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:

name="xiaowang"

注意:变量名和等号之间不能有空格!

命名规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

 除了显式地直接赋值,还可以用语句给变量赋值,如:

for file in `ls /etc`
或
for file in $(ls /etc)

以上语句将 /etc 下目录的文件名循环出来。

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可。为变量加上花括号能使程序更加易读和准确,是非常好的习惯。

只读变量

使用readonly命令可以将变量定义为只读变量,只读变量的值不能更改。

可以发现,运行到第4行的时候,会提示说name是只读变量,因此这时候的赋值无效,最后输出的还是xiaowang。

删除变量

使用ubset命令可以删除变量,变量删除后不能再次使用,但unset不能删除只读变量。

变量类型

三种shell变量,一种是局部变量,一种是环境变量,还有一种是shell变量

  • 1) 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 2) 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • 3) shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

shell字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。

单引号

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号

双引号中可以引用变量,也可以使用转义字符。

拼接字符串

获取字符串长度

使用#符获取字符串长度

提取子字符串

字符串的第一个元素下标为0而不是1,因此提取第10个到第14个元素的语法可以理解成,从第10个元素也就是下标从9开始提取5个元素。

shell数组

bash支持一维数组(不支持多维数组),并且在初始化时不需要指定数组大小。

类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于 0。

定义数组

在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

array_name=(value0 value1 value2 value3)

或者

array_name=(
value0
value1
value2
value3
)

还可以单独定义数组的各个分量:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

读取数组

与读取变量类似,也可以使用$符,格式如下;

${数组名[下标]}

下标如果用*号或@符表示,则可以读取数组全部元素。

获取数组长度

与获取字符串长度的方式类似,也是借助#符

shell注释

使用#开头来注释一行内容

如果要临时注释多行,可以使用花括号将其括起来定义成函数,函数不被调用,则相当于注释掉了

除此之外,多行注释也可以使用如下格式:

参数传递

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$nn 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……,注意,$0代表执行的文件的文件名。

运算符

Shell 和其他编程语言一样,支持多种运算符,包括:

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

 

注意,完整的表达式要被 反引号``包含,并且,表达式和运算符之间要有空格,如2+2是不对的,应该写成2 + 2,不然会当成字符串而拼接。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值