Linux 《高级 Bash 脚本编程指南》实验报告

WechatIMG87.jpeg

高级 Bash 脚本编程指南.jpg

运行Bash脚本

# 使用sh来执行
$ sh backup.sh
# 使用bash来执行
$ bash backup.sh
# 使用.来执行
$ . backup.sh
# 使用source来执行
$ source backup.sh
# 赋予脚本所有者执行权限,直接执行
$ chmod u+rx backup.sh && ./backup.sh

特殊字符

  • 美元符号$
# 变量替换
name=yohann
echo $name
  • 分号;
# 命令分隔符
echo God;echo love you
  • 反引号`
# 命令替换,反引号中的命令会优先执行
echo `expr 39 + 27`
  • 问号?
# 三元操作符
echo $((10>9?1:0))
  • 小括号(())
# 创建命令组
# a的值为new而不是old,因为括号将判断为局部变量
a=new
( a=old; )
echo "$a"
# 创建数组
arr=(1 3 5 7 9)
  • 大括号({})
# 文件名扩展
touch bible.{new,old}
# 创建匿名函数
# 变量a的值被更改了
a=new
{ a=old; }
echo "$a"
  • 中括号([])
# 条件测试
day=7
if [ $day -eq 7 ]
then
    echo "sunday"
fi
# 数组元素
god=(holy_father holy_son holy_spirit)
echo ${god[1]} ${god[2]} ${god[3]}
  • 尖括号<>
# 重定向backup.sh的输出到文件backup.log中。如果backup.log存在的话,那么将会被覆盖。
backup.sh > backup.log:
# 重定向backup.sh的标准输出和标准错误到backup.log中。
backup.sh &> backup.log:
# 重定向backup.sh的标准输出到标准错误中。
backup.sh >&2:
# 把backup.sh的输出追加到文件backup.log中。如果backup.log不存在的话,将会被创建。
backup.sh >> filename:
  • 竖线|
# 管道
echo "jesus" | tr 'a-z' 'A-Z'

变量

  • 只读变量
book="bible"
readonly bible
  • 位置参数
参数解释
$0脚本文件自身的名字
$1第1个参数
${10}第10个参数
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过 9 个
$$脚本运行的当前进程 ID 号
$!后台运行的最后一个进程的进程 ID 号
$@与 $* 相同,但是使用时加引号,并在引号中返回每个参数
$显示 shell 使用的当前选项,与 set 命令功能相同
$?显示最后命令的退出状态。 0 表示没有错误,其他任何值表明有错误。

基本运算符

  • 浮点运算
$ echo $(( 3.14*2*2 |bc ))
  • 关系运算符
运算符说明
-eq检测两个数是否相等,相等返回true。
ne检测两个数是否相等,不相等返回true。
-gt检测左边的数是否大于右边的,如果是,则返回true.
-lt检测左边的数是否小于右边的,如果是,则返回true。
-ge检测左边的数是否大于等于右边的,如果是则返回true。
-le检测左边的数是否小于等于右边的,如果是,则返回true。
  • 字符串运算符
运算符说明
=检测两个字符串是否相等,相等返回true
!=检测两个字符串是否相等,不相等返回true
-Z检测字符串长度是否为0,为0返回true
-n检测字符串长度是否为0,不为0返回true
str检测字符串是否为空,不为空返回true
  • 文件测试运算符
运算符说明
-e文件存在
-a文件存在,这个选项的效果与e相同。但是它已经被"弃用”了,并且不鼓励使用。
-f表示这个文件是一一个- 般文件(并不是目录或者设备文件)
-s文件大小不为零
-d表示这是一个目录
-b表示这是一个块设备(软盘,光驱,等等)
-c表示这是一个字符设备(键盘,modem, 声卡,等等)
-p这个文件是一个管道
-h这是一个符号链接
-L这是一个符号链接
-S表示这是一个socket
-t文件(描述符)被关联到一个终端设备上,这个测试选项一般被 用来检测脚本中的stdin([ t0 ])或者stodout(_t1 ])是否来自于一个终端文件是否具有可读权限(指的是正在运行这个测试命令的
-r用户是否具有读权限)
-w文件是否具有可写权限(指的是正在运行这个测试命令的用户是否具有写权限)
-x文件是否具有可执行权限(指的是正在运行这个测试命令的用户是否具有可执行权限)
-gset-group-id(sgid)标记被设置到文件或目录上
-k设置粘贴位
-O判断你是否是文件的拥有者
-G文件的group-id是否与你的相同
-N从文件上一次被读取到现在为止,文件是否被修改过
f1 -nt f2文件f1比文件f2新
f1 -ot f2文件f1比文件f2旧
f1 -ef f2文件f1和文件f2是相同文件的硬链接
!“非”, 反转上边所有测试的结果(如果没给出条件,那么返回真)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值