目录
定义变量:
使用变量:
将命令的结果赋值给变量:
删除变量:unset
退出当前进程:exit
读取从键盘输入的数据 :read
对整数进行数字运算:(())
逻辑与或:
检测某个条件是否成立:
管道(可将两个或多个命令连接在一起,上一个命令的输出信息会作为下一个命令的输入信息):command1 | command2
if语句
if else语句
if elif else语句
case in语句
for in循环
while循环
函数
Shell脚本(shell命令按一定语法组成的文件)作用:
软件启动;
性能监控;
日志分析;
...
shell命令本质:内置命令/外部命令(应用程序)。(可由type <command>判断)
例如:创建一个hello的c文件,意在终端输出hello world。然后编译这个c文件(gcc hello.c -o hello),然后把hell移动到/usr/bin/。
当向终端输入hello时,终端输出hello world。这个c文件就成了shell的外部命令。
常用的shell解释器:/etc/shells
shell脚本常用后缀名:.sh
Shell启动方式
当程序运行(./)
指定解释器运行(/bin/bash)
source和.
Shell脚本语法
定义变量:
variable=value
variable='value'(符号内不做逻辑判断)
variable="value"。
使用变量:
$variable
${variable}
将命令的结果赋值给变量:
variable=`command`
variable=$(command)
删除变量:unset
特殊变量 | 描述 |
$0 | 当前脚本的文件名 |
$n(n>=1) | 传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2 |
$# | 传递给脚本或函数的参数个数 |
$* | 传递给脚本或函数的所有参数 |
$@ | 传递给脚本或函数的所有参数。当被双引号“”包含时,$@与$*稍有不同 |
$? | 上个命令的退出状态或获取函数返回值 |
$$ | 当前Shell进程ID。对于Shell脚本,就是这些脚本所在的进程ID |
退出当前进程:exit
读取从键盘输入的数据 :read
对整数进行数字运算:(())
逻辑与或:
command1&&command2
command1||command2
检测某个条件是否成立:
test expression
[ expression ]
选项 | 描述 |
-eq | 判断数值是否相等 |
-ne | 判断数值是否不相等 |
-gt | 判断数值是否大于 |
-lt | 判断数值是否小于 |
-ge | 判断数值是否大于等于 |
-le | 判断数值是否小于等于 |
-z str | 判断字符串str是否为空 |
-n str | 判断字符串str是否为非空 |
=和== | 判断字符串str是否相等 |
-d filename | 判断文件是否存在,并且是否为目录文件 |
-f filename | 判断文件是否存在,并且是否为普通文件 |
管道(可将两个或多个命令连接在一起,上一个命令的输出信息会作为下一个命令的输入信息):command1 | command2
if语句
if condition
then
statement(s)
fi
if else语句
if condition
then
statement1
else
statement2
fi
if elif else语句
if condition1
then
statement1
elif condition2
then
statement2
...
else
statement
fi
case in语句
case expression in
pattern1)
statement1
;;
pattern2)
statement2
;;
pattern3)
statement3
;;
......
*)
statementn
;;
esac
for in循环
for variable in value_list
do
statements
done
value_list:
直接给出具体的值;
给出一个取值范围;
使用命令的执行结果;
使用Shell通配符;
使用特殊变量。
while循环
while condition
do
statements
done
函数
function name(){
statements
[return value]
}
全局变量:直接定义,只能在当前的shell进程里访问,但其它进程以及shell进程的子进程是不能访问的。
环境变量:export,能在当前的shell进程以及shell进程的子进程访问,但其它进程是不能访问的。
shell进程每次启动时,它都会执行shell配置文件的代码来做一些初始化的工作。
如果我们将shell变量的定义放到shell配置文件的话,shell进程一启动,就回去定义这些变量。
与Bash Shell有关的配置文件主要有:
/etc/profile
~/.bash_profile
~/.bash_login
~/.profile
~/.bashrc
/etc/bashrc
/etc/bash.bashrc
/etc/profile.d/*.sh
Shell执行顺序:/etc/profile、~/.profile(~/.bash_profile、~/.bash_login)
全部用户、全部进程共享:/etc/bash.bashrc
一个用户、全部进程共享:~/.bashrc
shell启动方式对变量的影响