Linux之shell脚本

一、什么是shell脚本?

基本上,shell脚本有点像是早期的批处理文件(.bat),即将一些命令集合一起一次执行(一次性执行多个命令)。但是shell脚本拥有更强的功能,那就是它可以进行类似程序的编写,并且不需要经过编译就能够执行

shell脚本是利用shell的功能所写的一个程序。这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能,已达到我们想要的功能。

二、脚本的书写规范

格式:必须 #!/bin/shell 起头(当文件执行的时候,能加载bash相关的配置文件,一般来说是非登录 shell的 ~/.bashrc
拥有可读、执行权限:chmod a+x 文件名
执行脚本:
①、./xx.sh
②、bash xx.sh
③、source xx.sh
④、sh xx.sh
在这里插入图片描述
注意:
①、命令是从上向下、从左向右分析与执行的
②、命令、选项与参数之间的多个空格会被忽略
③、空白行也将会被忽略掉,并且[Tab]键所产生的空白同样视为空格键
④、如果读取到一个Enter符号(CR),就尝试开始执行改行(或该串)命令
⑤、至于如果一行内容太多,写不下可以换行
⑥、【#】后面的所有内容被当做注释

编写脚本的时候,需要说明该脚本的:
①、内容与功能
②、版本信息
③、作者和联系方式
④、建文件日期
⑤、历史记录
⑥、脚本内较特殊的命令,使用【绝对路径的方式来执行】
⑦、脚本运行时需要的环境变量预先声明和设置

三、shell脚本的练习

1、交互式脚本:变量内容由用户决定

很多时候安装的时候会问你【需要安装的目录】,这个时候就是让用户去输入变量内容。

案例一:让用户输入:姓名,最后在屏幕上输出用户输入的信息

脚本信息如下:
在这里插入图片描述
显示效果如下:
在这里插入图片描述

2、随日期变化:利用date创建文件

案例二:创建三个文件,文件名为分别为 a)自定义名字+当前时间、b)自定义名字+前一天时间、c)自定义名字+前二天时间

脚本编写代码如下:
在这里插入图片描述

显示效果如下:
在这里插入图片描述
3、数值运算:简单的加减乘除

案例三:用户输入两个数字,实现相乘

脚本编写代码如下:
在这里插入图片描述
显示效果如下:
在这里插入图片描述
在数值运算上可以使用:

declear -i total=${number1}*${number2}
total= `expr $number1 \* $number2` 
total=$((${number1}*${number2}))

关于bc命令的使用如下:

 通过管道符

$ echo "15+5" | bc
20

scale=2 设小数位,2 代表保留两位:

$ echo 'scale=2; (2.777 - 1.4744)/1' | bc
1.30

bc 除了 scale 来设定小数位之外,还有 ibase 和 obase 来其它进制的运算:

$ echo "ibase=2;111" |bc
7

进制转换

#!/bin/bash

abc=192 
echo "obase=2;$abc" | bc
<pre>
<p>
执行结果为:11000000,这是用bc将十进制转换成二进制。</p>


<pre>
#!/bin/bash 

abc=11000000 
echo "obase=10;ibase=2;$abc" | bc

执行结果为:192,这是用bc将二进制转换为十进制。

计算平方和平方根:

$ echo "10^10" | bc 
10000000000
$ echo "sqrt(100)" | bc
10

四、判断式

1、关于某个文件名的【文件类型】判断存在否(结合 && 和 || 进行判断
语法:test [-efd] filename
“ -e ”表示该【文件名】是否存在(exit)
“ -f ”表示该【文件名】是否存在切位一个文件(file)
“ -d ”表示该文件是否存在且为目录(directory)

案例四:判断文件是否为文件
在这里插入图片描述

2、关于文件的权限检测
语法:test [-rwx] filename
“ -r ”检测该文件是否有【可读】权限
“ -w”检测该文件是否有【可写】权限
“ -x ”检测该文件是否有【可执行】权限

案例五:检测文件是否拥有权限
在这里插入图片描述
3、比较两个文件
语法:test file1 [-nt] [-ot] file2
“ -nt ”判断file1是否比file2新(newer than)
“ -ot ”判断file1是否比file2旧(older than)

案例六:判断文件的创建时间
在这里插入图片描述
4、关于两个整数之间的比较
语法:test number1 [-eq] [-ne] [-gt] [-lt] [-ge] [-le] number2
“ -eq ”表示两个数字相等
“ -ne ”表示两数字不相等
“ -gt ”表示n1 > n2
“ -lt ”表示n1 < n2
“ -ge ”表示n1 >= n2
“ -le ”表示n1 <= n2

案例七:判断两数是否相等
在这里插入图片描述
5、判定字符串的数据
语法:test [-zn] [string1 ==/!= string2]
“ -z ”判定字符串是否为0?0则返回true
“ -n ”判定字符串是否非0?非0返回true

案例八:判断字符串是否为0
在这里插入图片描述
6、多重条件判断
语法:test -r filename [-a0!] -x filename
“ -a ”表示(and)两条件同时成立。例如:test -r file1 -a -x file1,则file1同时拥有可读和可执行权限时,则返回true
“ -o ”表示(or)两条件任何一个成立
“ ! ”表示非。例如: test ! -x file,则file1不拥有可执行权限则返回true

案例九:让用户输入一个文件名;判断是否存在,不存在则中断;存在则判断是否是文件或者目录;判断对这个文件或目录所拥有的权限并输出

脚本代码如下:
在这里插入图片描述

显示效果如下:
在这里插入图片描述
7、利用判断符号 []
例如:想要知道 ${HOME} 变量是否为空。
语法:

 [ -z "${Home}" ] ; echo $?

注意:当中使用中括号作为shell的判断式时,必须注意中括号的两端需要有空格符来分割。

案例十:程序执行时,用户选择Y/y或N/n;如果输入Y/y则显示ok,如果输入N/n则显示no;如果是其他的字符则显示don’t。

脚本代码如下:
在这里插入图片描述
显示效果如下:
在这里插入图片描述

五、脚本的默认变量($0、$1…)

$#:代表后接的参数【个数】
$@:代表【“$1”“$2”“$3”】之意,每个变量是独立的(用双引号括起来)
$*:代表【“$1c$2c$3”】,其中c为分割字符,默认为空格

案例十一:查看程序的文件名;参数的个数;如果参数的个数小于2则告知参数数量太少;显示全部参数的内容。

脚本代码如下:
在这里插入图片描述

显示效果如下:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值