shell 脚本不过就是一些文件,我们把一系列需要执行的命令写入其中,然后执行它。
编写第一个hello shell脚本。
step 1.
尝试将所有你熟知的linux命令写入到一个文件中吧。
例如将下列命令写入到一个shell_001_01.sh文件中。
echo "hello shell"; whoami; date;
step 2.
执行脚本。
例如 sh shell_001_01.sh
思考扩展:
1. 我们换一种写入文件及执行的方式,如下
cat > shell_001_02.sh
echo "hello shell again"
whoami
date
按下ctrl+D
chmod +x shell_001_02.sh
./shell_001_02.sh
不同在于1)我们使用了cat复制终端输入,建立shell_001_02.sh文件
2)命令序列通过换行来分隔的,而不是";"
3) 执行脚本的方式不同,我们使脚本具有可执行权限,使其能够独立运行。
2. 你或许已经知道脚本第一行一般都是以“#! /bin/bash"开头,但我们上面的例子并没有写入这一行,但同样完成任务。为什么呢?
首先,需要了解linux中是存在着多种shell环境的,这里的Bash,它是目前大多数的linux系统的默认的shell环境。其它的shell环境有ksh、tcsh、zsh等
然后,解释下这一行的意义
#! 标识后面的/bin/bash 指定了bash解释器路径
那为什么没有这一行也是可以的呢?
当shell要求内核执行它(shell_001_02.sh)时, 内核无法做这件事,并回应’not executable format file"错误信息,shell收到此错误信息时,就会说‘啊哈,这不是编译型程序,那么一定是shell脚本,接着会启动一个新的/bin/sh标准shell副本来执行该程序。”
即,任何文件,只要不是可执行文件,就会被当成shell脚本。
只是因为linux中存在多种shell环境,所以加上#!能够更让用户来指定解释器。脚本的第一行加上这一句常常作为一种约定。
3.关注两个文件,~/.bashrc和~/.bash_history
当你打开一个终端的时候,该终端最初会执行.bashrc文件中设置的一组命令来定义诸如提示文本,颜色等设置。
.bash_histroy用于保存你执行过的命令。
4.可以通过file命令来查看当前文件的类型
可以通过cat /etc/shells 查看当前linux环境下支持的有哪些shell环境
可以通过ps -f 可以知道当前究竟处于哪一个shell环境。
可以通过usermod -s /bin/tcsh username 来更改命令解释程序,或者直接修改passwd文件