Linux shell编程基础(1) —— 构建基本的shell脚本

1、创建shell脚本文件以及执行shell脚本方法

(1)使用编辑器(如vim)创建一个文件test.sh,文件后缀为.sh。

(2)在第一行指定要使用的shell 格式如下

        #!/bin/bash

(3)将shell命令添加到创建的文件中,并保存退出

(4)执行脚本文件

        在执行脚本文件之前要让shell找到我们创建的文件test。那么如何让shell找到我们的文件呢。通常用以下两种方法

        a、将shell脚本文件所在的目录添加的PATH环境变量中

        b、在命令提示符后用绝对或者相对文件路径用来引用shell脚本

实例:创建一个shell脚本,输出一段字符串

代码段:

#!/bin/bash

str="hello"

echo $str

执行过程:

这里我们在命令提示符后用相对文件路径用执行shell脚本test,但是提示没有执行权限。通过chmod命令给文件所有者添加执行权限。执行结果在终端输出hello

2、使用echo命令显示文本消息

echo 命令添加到shell脚本中的任何需要显示额外信息的地方,用法为

echo + 字符串        默认字符串输出后换行

echo -n + 字符串         -n  表示字符串输出后不换行

在一般情况下,字符串不需要使用双引号(“”)和单引号(‘’)来划定文本字符串。但是在字符串中使用到了它们,就必须使用其中一种将字符串划定起来

实例:

#!/bin/bash

echo This is test1
echo "This's test2"
echo 'This is test3'

echo  "The time and date are:"
date

echo -n "The time and date are:"
date

运行结果:

其中date命令显示当前时间和日期

3、在shell中使用变量

在shell脚本中我们可以使用的变量有以下两种

a、环境变量

b、用户自定义变量

3.1 环境变量

我们可以用set命令查看当前shell下所有的环境变量

 在脚本中,我们可以在环境变量名称前用美元符合$来使用这些变量

$变量名或者${变量名}

实例:test.sh

 #!/bin/bash

 echo "USER: $USER"
 echo "UID: $UID"
 echo "HOME: $HOME"

执行结果

 其中环境变量USER、UID、HOME 分别表示登录到系统的用户名、用户的系统ID、用户的默认主目录

3.2 用户自定义变量

(1)用户变量可以是由任何数字、字母以及下划线组成的文本字符串,长度超过20个。

(2)用户变量区分大小写。例如变量var1与变量Var1则不等价

(3)使用等号(=)给变量赋值,注意变量、等号、值之间不能有空格

(4)shell脚本会自动决定变量值的数据类型,无需用户定义。

(5)在shell中声明的变量的生命周期直到shell脚本结束。在shell脚本中声明的变量为全局的

实例:

#!/bin/bash

name1="user1"
age1="18"

name2="user2"
age2=$age1

echo "name1: $name1 age1: $age1"
echo "name2: $name2 age2: $age2"

执行结果

备注:引用一个变量值需要使用美元符号$,而在引用变量对其赋值时则不用使用美元符。一句话就是,在引用变量的值时使用美元符号$,而在对变量进行操作时不使用$

3.3 命令替换

命令替换指的是我们可以从命令输出中提取信息,并将其赋值给变量。

将命令的输出赋值给变量的两种方法

a、使用反引号( ` 左上角与波浪线~同一位置)

b、使用 $() 格式

实例:通过命令替换获取到当前的日期,并用它来生成唯一的文件名

#!/bin/bash

today=$(date +%y%m%d)
ls -al /mnt/c/Users/qiaobao/home > log.$today 

执行结果:在home目录下生成一个log.210729的日志文件,用cat命令查看可以看到将ls命令的结果重定向输出到了日志文件中

4、重定向与管道

重定向指的是命令的输出可以输出到另一个位置,而不仅仅是让它显示到终端显示器上。

重定向分为以下两种

a、输出重定向

b、输入重定向

4.1 输出重定向

 输出重定向分为一般输出重定向和追加重定向

一般输出重定向(>) 

        特点:当指定的输出文件已经存在,重定向操作会用新的文件数据覆盖已有文件

追加重定向(>>)

        特点:不会覆盖原有的文件,会在原有的文件末尾追加数据

实例1: 将ls 命令的输出重定向到outfile文件中,当outfile文件不存在是会创建一个新的文件。当outfile文件存在时会覆盖原有文件(可以理解为删除了原来的outfile,然后创建了一个新的outfile文件)。

实例2:使用ll 命令将原来的outfile覆盖

实例3:使用echo 命令将111输出到outfile文件中,将outfile文件覆盖。ls 命令的输出追加的到outfile文件中

4.2 输入重定向

输入重定向与输出重定向刚好相反,输入重定向将文件的内容重定向到命令中。输入重定向分为一般输入重定向(<)和内联输入重定向(<<)

一般输入重定向 (<)       

        特点:将文件中的内容作为命令的输入

内联输入重定向 (<<)     

        特点:无需使用文件进行重定向,只需要在命令行中指定标记符即可。

实例1:将test.sh文件中的内容重定向到wc命令中,其中wc命令的功能为对数据中的文本进行计数。默认情况会输出文本的行数、文本的词数、文本的字节数。

实例2:在命令行上使用内联输入重定向时,shell会用PS2环境变量中定义的次提示符(>)来提示你输入数据,直到你输入自己定义的标识符结束。

4.3 管道

我们将一个命令的输出作为另一个命令的输入可以用重定向来实现。

其实shell中提供另一种实现的方法,使用管道。

格式 命令1 | 命令2 (管道符  |  是两个竖线组成)

实例:

 管道的特点:

        (1)可以直接将命令的输出作为另一个命令的输入,两个命令中没有任何的缓冲区或中间文件

        (2)在命令行中可以使用多个管道 例命令1 | 命令2 | 命令 3

备注:管道最流行的用法是将大量的输出用more命令一页一页的显示

5、shell中的数学运算

5.1 使用expr命令

expr 命令可以处理命数学表达式,

格式: expr + 表达式

实例:expr 2 + 9

以下表格是expr命令可以识别的数学和字符串操作符

在使用expr命令需要注意以下两点

(1)许多expr命令操作符在shell中有其他的含义。如 * 当我们在expr表达式中使用时需要使用转义字符\进行转义,如 expr 3 \* 5

(2)当我们在脚本中需要获取的到expr命令的值时,需要用到命令替换,如 v1=$(expr 5 + 3)

其实在shell中提供了另一种方法执行数学表达式,可以使用美元符号加方括号的方式($[ 表达式])处理数学表达式

实例:

注意:在使用方括号时,在其内部不用使用转义字符进行转义

备注:bash shell 只能支持整数运算,不支持浮点数运算

5.2 bash计算器 — bc 

1、expr 命令只能处理整数运算,要想处理浮点数运算,可以使用shell内建的bash计算器 — bc

特点:

(1)bc 可以识别数字(整数和浮点数)、变量(简单变量和数组)、注释(#或者c语言中的/* ... */)、表达式、函数、编程语句(if-then语句)

(2)使用bc,必须用quit才能退出

(3)可以改变scale变量的值,从而改变精度。即保留小数点多少位。默认scale=0

(4)-q 命令行选项可以不显示欢迎提示信息

实例:

2、在脚本中使用bc

基本格式:

变量=$(echo "操作1;表达式" | bc)  

操作1可以允许你设置变量,多个变量用分号隔开。表达式定义了bc中的数学表达式

实例:

当我们需要进行大量计算时,在脚本中可以使用内联输入重定向(<<)对bc进行多个输入

实例:test.sh

#!/bin/bash

v1=$(bc << EOF
v1=10
v2=1
v3=2
scale=4
v1 / (v2 + v3)
EOF
)
echo $v1

执行结果:

 备注:在bc中的变量只能在bc中有效。而且在bc中可以不用$直接使用变量的值

  • 9
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值