Shell学习笔记 |
说明:该文档是我自己在学习过程中记录的一些笔记,仅梳理了经常用到的一些概念和语法规则,适用于有些基础的读者阅读。(也可以在“我的资源”里下载电子版PDF)
shell的三种变量:
变量操作:
Shell系统变量,主要是用于对参数判断和命令返回值判断时使用,系统变量详解如下:
$0 当前脚本的名称;
$n 当前脚本的第n个参数,n=1,2,…9;
$* 当前脚本的所有参数(不包括程序本身);
$# 当前脚本的参数个数(不包括程序本身);
$? 命令或程序执行完后的状态,返回0表示执行成功;
$$ 程序本身的PID号。
Shell环境变量,主要是在程序运行时需要设置,环境变量详解如下:
PATH 命令所示路径,以冒号为分割;
HOME 打印用户家目录;
SHELL 显示当前Shell类型;
USER 打印当前用户名;
ID 打印当前用户id信息;
PWD 显示当前所在路径;
TERM 打印当前终端类型;
HOSTNAME 显示当前主机名;
PS1 定义主机命令提示符的;
HISTSIZE 历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间;
RANDOM 随机生成一个 0 至 32767 的整数;
HOSTNAME 主机名
env 查看环境变量
read 从键盘获取值read(在一行上显示和添加提示 需要加上-p)
If条件判断语句:通常以if开头,fi结尾。也可加入else或者elif进行多条件的判断
# 单分支语句:if-fi :就类似于c中的if条件判断,如下:
# 双分支if 语句:if-else-fi :若condition成立则执行command1,否则执行command2。
#多支条件语句:if else-if else :若condition1成立,执行command1,若condition1不成立,condition2成立,执行command2,若两condition都不成立就执行command3.
常用逻辑判断运算符:
-f 判断文件是否存在 eg: if [ -f filename ];
-d 判断目录是否存在 eg: if [ -d dir ];
-eq 等于,应用于整型比较 equal;
-ne 不等于,应用于整型比较 not equal;
-lt 小于,应用于整型比较 letter;
-gt 大于,应用于整型比较 greater;
-le 小于或等于,应用于整型比较;
-ge 大于或等于,应用于整型比较;
-a 双方都成立(and) 逻辑表达式 –a 逻辑表达式;
-o 单方成立(or) 逻辑表达式 –o 逻辑表达式;
-z 空字符串;
-x 是否具有可执行权限
|| 单方成立;
&& 双方都成立表达式。
例:判断某个服务是否在运行:
#!/bin/bash
# 定义一个变量名
name=crond
num=$(ps -ef|grep $name|grep -vc grep)
if [ $num -eq 1 ];then
echo "$num running!"
else
echo "$num is not running!"
fi
例:判断目录是否存在:
#!/bin/bash
# this is check directory
if [ ! -d /data/rivers -a ! -d /tmp/rivers ];then
mkdir -p /data/rivers
fi
for循环语句:
#格式:for name [ [ in [ word ... ] ] ; ] do list ; done
for 变量名 in 取值列表; do
语句 1
done
while循环语句:当condition 成立的时候进入 while 循环,直到 condition 不成立时才退出循环。
While循环语句与for循环功能类似,主要用于对某个数据域进行循环读取、对文件进行遍历,通常用于需要循
环某个文件或者列表,满足循环条件会一直循环,不满足则退出循环,其语法格式以while…do开头,done结尾与
#while 关联的还有一个 until 语句,它与 while 不同之处在于,是当条件表达式为 false 时才循环,实际使用中比。
while (条件表达式)
do
程序段
done
break 和 continue 语句:
break 是终止循环。
continue 是跳出当前循环。
#示例 1:在死循环中,满足条件终止循环
while true; do
let N++
if [ $N -eq 5 ]; then
break
fi
echo $N
done
输出: 1 2 3 4
#示例 2:举例子说明 continue 用法
N=0
while [ $N -lt 5 ]; do
let N++
if [ $N -eq 3 ]; then
continue
fi
echo $N
done
输出: 1 2 4
# 打印 1-100 数字
i=0
while ((i<=100))
do
echo $i
i=`expr $i + 1`
done
函数:
# Shell允许将一组命令集或语句形成一个可用块,这些块称为Shell函数,Shell函数的用于在于只需定义一次,后
期随时使用即可,无需在Shell脚本中添加重复的语句块,其语法格式以function name(){开头,以}结尾。
# Shell编程函数默认不能将参数传入()内部,Shell函数参数传递在调用函数名称传递,例如name args1 args2。
# 函数语法
func() {
command1
command1
……
}
fun # 直接调用函数名
# Shell 函数很简单,函数名后跟双括号,再跟双大括号。通过函数名直接调用,不加小括号。
#!/bin/bash
func() {
VAR=$((1+1))
return $VAR
echo "This is a function."
}
func
echo $?
# bash test.sh
2
创建apache软件安装函数:
source命令用法:用source是使文件生效
source FileName
作用:在当前bash环境下读取并执行FileName中的命令。
注:该命令通常用命令“.”来替代。
如:source .bash_rc 与 . .bash_rc 是等效的。
注意:source命令与shell scripts的区别是,
source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。这样如果把设置环境变量(或alias等等)的命令写进scripts中,就只会影响子shell,无法改变当前的BASH,所以通过文件(命令列)设置环境变量时,要用
source 命令。
字符串变量:
算数运算符:
关系运算符:关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
布尔运算符:
逻辑运算符:
字符串运算符:
文件测试运算符:主要用于检测unix文件的各种属性
运算指令:
数组:
shell函数:所有函数在使用前必须定义,必须将函数放在脚本开始部分,直至shel解释器首次发现它时,才可以使用。
当函数没有return时,默认返回最后一个命令的运行结果作为返回值。
定义函数的两种格式:
格式一:
函数名(){
命令 …
}
格式二:
函数名(){
命令 …
}
/dev/null文件:
printf输出:printf 不会像 echo 自动添加换行符,我们可以手动添加\n,无大括号,直接以空格分隔