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中可以不用$直接使用变量的值
更多推荐
Linux shell编程基础(1) —— 构建基本的shell脚本
发布评论