一、什么是 shell script
shell script 是利用 shell 的功能所写的一个“程序 (program)”,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正则表达式、管道命令与数据流重导向等功能,以达到我们所想要的处理目的。
简单的说,也就是可以使用一个普通的文本,写上多条 shell 命令,一起执行这些命令。
但是,在这个文件中可以添加一些逻辑判断什么的。
二、shell script 规范
- script 的功能;
script 的版本信息;
script 的作者与联络方式;
script 的版权宣告方式;
script 的 History (历史纪录);
script 内较特殊的指令,使用“绝对路径”的方式来下达;
script 运行时需要的环境变量预先宣告与设置。
三、简单脚本练习
vim show-name.sh
#!/bin/bash# Program:# User inputs 2 integer numbers; program will cross these two numbers.# History:# 2015/07/16 VBird First releasePATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/binexport PATHecho -e \"You SHOULD input 2 numbers, I will multiplying them! \\n\"read -p \"first number: \" firstnuread -p \"second number: \" secnutotal=$(( ${firstnu} * ${secnu} ))echo -e \"\\nThe result of ${firstnu} x ${secnu} is ==> ${total}\"
四、执行脚本方式 (source script, sh script, ./script)
source script
父进程中执行脚本中代码
image
sh script
子进程中执行脚本中的代码,相当于打开了一个子 shell ,一个全新的环境。
image
五、script 的默认变量
特殊变量(重要)
$#:代表后接的参数“个数”,以上表为例这里显示为“ 4 ”;
$@:代表
\"$1\" \"$2\" \"$3\" \"$4\"之意,每个变量是独立的(用双引号括起来);
$*:代表
\"$1<u>c</u>$2<u>c</u>$3<u>c</u>$4\",其中
<u>c</u>为分隔字符,默认为空白键, 所以本例中代表
\"$1 $2 $3 $4\"之意。
位置变量
位置变量是根据命令出现在命令行上的位置来确定的变量,在shell调用过程中,会按参数所在的位置进行调用。
-
命令(shell脚本名) 参数1 参数2 参数3
$0 $1 $2 $3 ...$9
例如:
wc /etc/passwd /etc/group
例如:
编辑一个任意文件(这里是 position-arg.sh),写入如下内容
#!/bin/bashecho \"this scriptname is $0\"echo \"this 1st argument is $1\"echo \"this 2nd argument is $2\"echo \"this 3rd argument is $3\"echo \"参数分别为$*\"echo \"共有$#个arguments\"
此脚本地执行时,使用sh执行即可
sh position-arg.sh a b c d e
\”
echo “共有$#个arguments”
此脚本地执行时,使用sh执行即可
sh position-arg.sh a b c d e