Linux 脚本进阶
Advanced Linux Scripting
-
(source) 和 (.) 和 (bash + 脚本) 和 (./脚本)-
这几个命令都可以用来执行文件或者脚本,用法:
test.sh脚本文件
#!/bin/sh echo "Print Bash Path:$SHELL" export EXPORT_VAR=export export LOCAL_VAR=local echo $EXPORT_VAR echo $LOCAL_VARsource ./test.sh . ./test.sh ./test.sh bash ./test.sh可以看到执行结果都一样的,然而他们的区别是有不同的
-
不同点
- (source) 和 (.) 的功能是一样的,用type souce 和 type . 命令看没有什么不同,help source可以看具体细节。(bash + 脚本) 和 (./脚本)区别主要是用不同的shell执行,下面不在讲(.)和(bash + 脚本)。
- (source)可以运行普通脚本,(./脚本)需要设置文件称可执行权限。如
source ~/.bash_profile一般不是可执行权限。 - 这几个命令是会由父shell创建子进程去执行shell脚本,且会继承所有父shell的环境变量。,但(source)会返回,(./脚本)不会返回父shell,
./test.sh;echo $EXPORT_VAR并不会再次打印变量值,但source ./test.sh;echo $EXPORT_VAR会。
例子:一般修改vim配置会添加一个~/.vimrc文件,在里面会写一些vim设置比如设置行号就加
set number,修改后直接用source ~/.vimrc刷新配置而不用重新启动shell或者设置可执行权限。 -
-
function-
结构
[ function ] funname [()] { action; [return int;] }可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
-
返回值
函数的返回值为函数中最后一个执行的命令的状态值,通常我们可以用return来指定函数的返回值,return后跟数值n(0-255),函数返回值在调用该函数后通过 $? 来获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
-
函数参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,\(2表示第二个参数...,获取第十个参数需要\){10}。当n>=10时,需要使用${n}来获取参数
$# -传递到脚本或函数的参数个数
$* -以一个单字符串显示所有的参数
$? -显示最后命令的退出状态。0表示没有错误,其他表示有错误。
-
reference
-
-
export-
Linux export 命令用于设置或显示环境变量。
在 shell 中执行程序时,shell 会提供一组环境变量。export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。这样是为了我们定义一个变量时可以在子shell中被调用,而不需要重复去定义
-
语法
export [-fnp][变量名称]=[变量设置值]参数说明:
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
-
reference
-
-
read-
Linux read命令用于从标准输入读取数值
read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。
-
语法
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]参数说明:
- -a 后跟一个变量,该变量会被认为是个数组,然后给其赋值,默认是以空格为分割符。
- -d 后面跟一个标志符,其实只有其后的第一个字符有用,作为结束的标志。
- -p 后面跟提示信息,即在输入前打印提示信息。
- -e 在输入的时候可以使用命令补全功能。
- -n 后跟一个数字,定义输入文本的长度,很实用。
- -r 屏蔽\,如果没有该选项,则\作为一个转义字符,有的话 \就是个正常的字符了。
- -s 安静模式,在输入字符时不再屏幕上显示,例如login时输入密码。
- -t 后面跟秒数,定义输入字符的等待时间。
- -u 后面跟fd,从文件描述符中读入,该文件描述符可以是exec新开启的。
-
-
if-then-elif-then-else-fi-
语法
if command then commands elif command;then commands else commands fi在shell中,if后面是根据命令的退出状态来的。如果成功执行命令,状态为0,则执行then后面的命令,如果没有成功执行命令,状态为0以外的其他值,则then后面的命令则不会执行
-
reference
-

浙公网安备 33010602011771号