一些零碎的基础知识
一、认识Shell脚本
一)相关概念
Shell是一种命令解释器,作用是按次序执行(遇到子脚本,先执行子脚本的命令)用户输入的命令和程序。
Shell脚本语言是弱类型语言,与其他脚本语言相比的优势是可以处理偏操作系统底层的业务。
查看系统默认Shell:
#方法一:
echo $SHELL
#方法二:
grep root /etc/passwd
二)开发规范
1)脚本第一行指定解释器
#!/bin/bash
2)开头添加版本、版权等信息
3)脚本中尽量不要用中文
4)扩展名为.sh
5)脚本应放在固定路径下
三)执行方法
1)bash script-name或者sh script-name: 脚本没有x权限或者脚本开头没有指定解释器时,可用此方法,此方法也是常见的方法。
2)path/script-name:当前路径下执行脚本,脚本要有x权限。
3)source script-name 或者 . script-name:在当前shell中直接运行脚本(其他方式会开启新的shell),因此可将该脚本中的变量或者函数传递到当前shell中。
四)重定向和管道
1)输出重定向
将命令的输出发送到一个文件中(每次都会新创建文件):
ls -al > list.txt
如果不想每次都新建文件,可以追加:
date >> list.txt
2)输入重定向
将文件内容发送给命令,当做相关参数:
ls -al < in.txt
内联输入重定向:
无需文件中的数据,将标记中的数据重定向给命令,其语法格式为:
command << MARKER
data
MARKER
3)管道
使用管道将一个命令的输出当做另一个命令的输入,其语法格式为:
command1 | command2
五)脚本调试
1)用bash命令参数调试
sh [-nvx] script.sh
-n:不执行脚本,仅检查脚本语法,并给出错误提示
-v:执行脚本前,先将脚本内容输出到屏幕上,并给出错误提示
-x:将脚本内容及输出显示到屏幕上,逐行追踪脚本执行
2)使用set命令进行调试
与bash命令相比set命令可以控制追踪范围
set -n:读命令但不执行
set -v:显示读取的所有行
set -x:显示所有的命令及其参数
# !/bin/bash
echo
set -x #开启脚本调试
echo
echo
echo
set +x #关闭脚本调试
exit
运行结果:
+ echo + echo + echo + set +x
六)其他
执行多个命令:
放在同一行用分号隔开
ls ; date ; who
命令替换:
从命令输出中提取信息,并将其赋值给变量。
方法一:
d=$(date)
方法二:
d=`date`