shell-简介、特殊符、管道、重定向、数学运算

1、什么是shell脚本

shell脚本就是将完成一个任务的所有的命令按照执行的先后顺序,自上而下写入到一个文本文件中,然后给予执行权限。

2、书写一个shell脚本

(1)shell脚本的命名:

名字要有意义,方便后续知道该脚本的作用。在Linux下文件没有扩展名的概念,但是依然建议你用.sh结尾;名字不要太长,最好能在30个字节以内解决。例如:check_memory.sh

(2)shell脚本格式:

shell脚本开头必须指定脚本运行环境 ,以 #! 这个特殊符号组合来组成。如: #!/bin/bash 指定该脚本是运行解析由/bin/bash来完成的;

shell中使用#来注释

#!/bin/bash		#指定该脚本的解析器
echo hello shell

(3)运行shell脚本:

1)给shell脚本运行权限
chmod u+x filename.sh
./filename.sh
2) 如果不希望赋予脚本执行权限,那么可以使用bash命令来运行未给予执行权限的脚本
bash filename.sh

3、shell中特殊符号

符号含义
~家目录,例如cd ~表示进入用户家目录
!执行历史命令,例如!!执行上一条命令,! 25执行历史命令中的25行命令
$取变量的值,例如 echo $PATH输出PATH变量的值,echo $SHELL输出当前shell变量的值
+ - * / %对应数学运算中的加减乘除取余
&单一个&符号,且放在完整指令的最后端,表示将该指令放入后台工作
*通配符,匹配所有字符
?通配符,匹配回车以外的单个字符
;可以在shell中一行执行多个命令,命令之间用分号分割
|管道符 ,上一个命令的输出作为下一个命令的输入 例如:cat filename | grep xx
\转义字符
` `反引号,命令中执行命令。例如:echo "today is 反引号date 反引号"。看下面例1。
''单引号,脚本中字符串要用单引号引起来,但是不同于双引号的是,单引号不解释变量。看下面例2
""双引号,脚本中出现的字符串可以用双引号引起来,双引号中的变量会被解释替换。看下面例2
$?上一条命令的退出状态或者返回值。例如:查看上一条命令的返回值echo $?

示例1:反引号括起来的字符串会被当命令处理
在这里插入图片描述
在这里插入图片描述
示例2:双引号括起来的字符串中的变量会被解释,单引号不会。下面示例中$SHELL为一个环境变量,该变量的值为当前shell的解释器
在这里插入图片描述

4、shell中管道的运用

|管道符在shell中使用是最多的,很多组合命令都需要通过组合命令来完成输出。管道符其实就是将前一个命令的输出作为下一个命令的输入
在这里插入图片描述

5、shell重定向

  • >:输出重定向,会覆盖原数据

  • >>:输出重定向,在源数据末尾追加
    在这里插入图片描述
    在这里插入图片描述

  • <:输入重定向。用法:命令<文件:将指定文件作为命令的输入设备

  • <<:用法:命令 << 分界符:表示从标准输入设备(键盘)中读入,直到遇到分界符才停止(读入的数据不包括分界符),这里的分界符其实就是自定义的字符串
    在这里插入图片描述
    在这里插入图片描述

Linux下与输出输出相关比较重要的文件描述符

文件描述符文件类型硬件
0stdin标准输入键盘
1stdout标准输出显示器
2stderr标准错误输出显示器

stdin、stdout、stderr 默认都是打开的,在重定向的过程中,0、1、2 这三个文件描述符可以直接使用。
/dev/null:这是一个空设备,也称黑洞文件,通常用来处理进程中那些不想要的输出流。

注意:

输出重定向的完整写法其实是command fd>file或者command fd>>file,其中 fd 表示文件描述符,如果不写,默认为 1,也就是标准输出文件。命令 >>文件完整写法为命令 1>>文件当文件描述符为大于 1 的值时,比如 2,就必须写上。且fd和>或>>之间不能有空格

command > filename等价于command 1 > filename以覆盖的方式,把 command 的正确输出结果输出到 filename文件中。
command >> filename等价于command 1 >> filename)以追加的方式,把 command 的正确输出结果输出到 filename文件中。
command 2 >> filename标准错误输出重定向以追加的方式,把 command 的错误输出结果输出到 filename文件中。
command >file 2>&1正确输出和错误信息同时保存以覆盖的方式,把正确输出和错误信息同时保存到同一个文件(file)中。
command >file 2>file正确输出和错误信息同时保存功能与上一条相同,但是不建议使用。
区别就在于前者只打开一次文件file,后者会打开文件两次,
并导致stdout被stderr覆盖。从IO效率上来讲,使用上面的方式较好
command >>file 2>&1正确输出和错误信息同时保存以追加的方式,把正确输出和错误信息同时保存到同一个文件(file)中。
command < file1 >file2将 file1 作为 command 的输入,并将 command 的处理结果输出到 file2。

下面看一个示例:
在这里插入图片描述

6、shell中的数学运算

shell中常见算术运算符

算术运算符说明
+ - * / %加、减、乘、除、取余
**幂运算。例如:echo $((2**3)),求2的三次幂
++ --自增、自减
! && ||逻辑非、且、或
< <= > >= == != =小于、小于等于、大于、大于等于、不等于、赋值
<< >>左移、右移

shell中常用的数学计算命令如下

运算命令说明
(())用于整数运算,效率高。常用
bcLinux下的计算器程序,可以处理整数和小数。如果计算小数的用它
let用于整数运算,和(())类似
$[]用于整数运算,不如(())灵活
expr可用于整数运算,也可以处理字符串,较为麻烦,需注意各种细节

(1)双小括号(())用法

((表达式))			#需手动输出,例如echo $((1+2*3))
变量=$((表达式))		#获取表达式的运算结果赋值给变量
echo $((表达式))	#直接输出结果

将表达式将在((和))之间,多个表达式之间使用逗号分隔。对于多个表达式的情况,以最后一个表达式的值作为整个(())命令的执行结果.

示例:

root@wkr:~# echo $((1+2+3))					#直接输出运算结果
6
root@wkr:~# a=$((2*3*2))					#将运算结果赋值给变量a,再次输出变量a的值
root@wkr:~# echo $a
12
root@wkr:~# echo $((a=1+2+3,b=4+5+6))		#多个表达式以逗号分隔,以最后一个表达式的值作为整个命令的运算结果
15
root@wkr:~# echo $a							#上一个运算将a赋值,这里直接输出变量a的值
6
root@wkr:~# echo $((++a))					#自增运算
7

(2)bc计算器命令

在命令行下直接输入bc即可进入到bc计算器,输入表达式可算出结果

在这里插入图片描述

使用scale=3来设置bc计算器小数点后保留几位

在shell下使用bc计算器呢

在shell中使用bc计算器,我们需要借助|管道运算符,将表达式通过管道流入到bc命令 。

示例:

root@wkr:~# echo "(3+5)/2"|bc
4
root@wkr:~# echo 100/33|bc
3
root@wkr:~# echo "scale=3;100/33"|bc	#保留小数点后三位
3.030
root@wkr:~# echo 1.24+3.88|bc
5.12
root@wkr:~# echo "10/3的结果为:`echo "scale=3;10/3"|bc`"
10/3的结果为:3.333

配合变量使用

root@wkr:~# i=`echo "sacle=2;1/3+1.5"|bc`		#将1/3+1.5的值赋给变量i
root@wkr:~# echo $i
1.5
root@wkr:~# j=`echo "$i*100"|bc`				#将变量i的值乘以100计算后的结果赋值给变量j
root@wkr:~# echo $j
150.0
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值