第一个shell脚本编写

开启shell环境
Mac系统下,自带的终端就是一个标准的shell环境,笔者这里没有使用自带的终端,而是自己安装了iTerm2,这也是一个标准的shell环境。

创建shell脚本的路径

mkdir -p shell/script

创建shell脚本
1)shell脚本的格式是.sh的文件,使用vim编辑器创建脚本。

vim first_shell.sh

2)编辑shell脚本内容

#!/bin/bash
#This is a shell script

echo "hello world!"

脚本中的第一行#!/bin/bash的作用是提示这一文件是shell脚本文件;
第二行是注释行,shell脚本中用#来进行注释;
接下来就是shell命令行,这是shell脚本中真正执行的语句;
脚本编辑完成后,保存退出。

shell脚本的执行
执行shell脚本有以下两种方法:
1)直接使用命令/bin/bashbash切换到shell执行环境,然后执行.sh文件

/bin/bash first_shell.sh

2)给.sh文件添加执行权限
首先使用ls -l查看文件权限
在这里插入图片描述
可以看到当前文件是没有执行权限,使用命令chmod来修改文件的权限,这里修改为当前用户有执行权限

chmod u+x first_shell.sh

然后,使用以下命令执行

./first_shell.sh

在这里插入图片描述
shell脚本的调试

  • bash -n first_shell.sh
    -n选项可用于测试shell脚本是否存在语法错误,不会实际执行命令。养成完成shell脚本后使用-n选项来测试脚本是否存在语法错误是一个很好的工作习惯。
  • bash -c “string”
    -c选项可以使shell解释器从一个字符串而不是文件中读取并执行shell命令。该选项对于需要临时测试一小段脚本的执行结果时很有用,示例如下:
    在这里插入图片描述
  • bash -x first_shell.sh
    -x选项用来跟踪脚本的执行,是调试shell脚本的工具,-x选项是shell在执行脚本的过程中,显示实际的每一行信息,且在行首显示一个’+‘号,’+'号后面显示的是经过变量替换之后的命令行的内容,有助于分析命令的执行过程,示例如下:
    shell脚本内容:
#!/bin/bash
#define funciton
function add ()
{
	if (( $# < 2 ));then
		echo "please input two numbers!"
		exit
	fi
	return $(($1 + $2))
}
add $1 $2
echo "Sum is $? "

调试过程:
1)未输入参数的情况
在这里插入图片描述
2)正确输入参数的情况
在这里插入图片描述
对“-x”选项的增强
观察上面使用-x选项来对shell脚本调试的输出结果,调试的输出信息是进行变量替换之后的命令行内容以及在行首的’+'号提示符,对于行数比较多的复杂脚本来说,还是很难在shell脚本中定位到具体的有问题的行,可以使用shell的内置环境变量来增强“-x”选项的输出信息,比如行号、函数名等。
内置环境变量$LINENO可以表示shell脚本的当前行号;
内置环境变量$FUNCNAME表示函数的名字,这个变量是一个数组变量,包含了整个调用链上所有的函数名,${FUNCNAME[0]}表示当前正在执行的函数的名称,${FUNCNAME[1]}表示调用函数${FUNCNAME[0]}的函数名称,以此类推。。
shell PS变量中也介绍过,PS4变量是跟踪执行输出的前缀,默认为‘+’,而bash -x 调试信息中的“+”号正是$PS4的值,因此可以通过重定义PS4的值来增强-x选项的输出。

可以在执行调试命令前,先执行export PS4=’+{ L I N E N O : LINENO: LINENO:{FUNCNAME[0]}}’,临时将PS4变量设置成+{行号}:{当前函数名称}的形式,也可以将PS4的设置信息写入.bash_profile文件中,运行source .bash_profile让其生效,使PS4的设置永久生效,新的调试信息如下:
在这里插入图片描述
输入参数的情况:
在这里插入图片描述
当然,也可以使用其他的内置环境变量来重定义PS4变量,目的是提高调试信息的可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值