1. shell 脚本的执行方式
1.1 直接绝对路径执行
1.2 相对路径执行
首先进入到shell脚本所造的目录
PS:用./执行要增加x权限。用bash执行可以不增加x权限
1.3 在当前shell中执行
前两种方法执行shell脚本时都是在当前shell(称为父shell)开启一个子shell环境,此shell脚本就在这个子shell环境中执行。
shell脚本执行完后子shell环境随即关闭,然后又回到父shell中。
而以下方法则是在当前shell中执行的,在脚本的执行路径前在加 .
2. shell 变量
shell 变量分为系统变量和用户自定义的变量,定义变量时不加$,使用时要加$,使用echo $变量名 可以打印出变量值。
2.1 系统变量
常见的系统变量有:$HOME、$PWD、$SHELL、$USER
显示当前shell中的所有变量用set
2.2 自定义变量
2.2.1 变量定义
变量定义:变量名=值(等号左右不能有空格,变量名称一般习惯大写)
撤销变量:unset 变量名
2.2.2 双引号和单引号的区别
双引号只会对空格脱意
单引号会对所有字符脱意(即输入什么显示什么)
2.2.3 将变量提升为全局变量
export 变量名(其他shell可以使用)
/etc/profile 文件中定义JAVA_HOME就使用的export
使用source 可以将文件中的export指令执行一遍
2.2.4 将命令的返回值赋给变量
用反引号(Esc下面的那个键)或者$(命令)
2.2.5 Shell中特殊变量
$0:当前脚本的文件名
$n:第n个位置参数(n>=1)
$#:脚本运行时携带的参数个数
$?:最近一个命令的退出状态码(0为正常)
$$:当前shell的进程ID(PID)
$!:最近一个后台命令的PID
$*:传递给脚本或函数的所有参数,$*会将这些参数视为一个整体
$@:传递给脚本或函数的所有参数,$@会将所有参数当作同一字符串中的多个独立的单词
3. 运算符
shell中只能进行整形的运算,要用expr来标示是运算表达式(expr后要有空格,运算符号前后要有空格)
4. 流程控制语句
4.1 for循环
4.2 while 循环
4.3 case 语句
4.4 if 语句
注意:判断语句 [ condition ] 中,condition 前后都需要有空格;且condition非空返回true,空返回false;
常用的判断条件:
字符串的比较:=
小于:-lt
小于等于:-le
大于:-gt
大于等于:-ge
数字等于:-eq
不等于:-ne
5. 自定义函数
5.1 语法
调用函数时需要先定义,shell是逐行运行,不会预先编译!
[ function ] functionName [ () ]
{
action;
[ return int; ]
}
例如:
function start() | function start | start()
#!/bin/bash function sum(){ echo $1,$2; return $(($1+$2)) } sum 5 6 echo "sum: " $?
5.2 入参
调用时给入
5.3 返回值
函数的返回值只能通过return返回,return后只能跟数字0-255;
若不加返回值,则以最后一行命令的结果作为返回值;
函数的返回值只能通过$?获得
5.4 代码的调试
sh -vx function.sh