在进行服务器集群管理时,需要编写shell程序来进行服务器管理。
shell是一个命令行解释器,他会为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户用shell启动、挂起、停止和编写一些程序。
脚本以#!/bin/bash开头
#!/bin/bash
脚本需要有可执行权限
要赋予脚本的+x权限,再执行脚本。
不用赋予脚本+x权限,直接执行。
Linux shell中的变量分为:系统变量和用户自定义变量。
[root@bogon shcode]# echo $HOME
/root
[root@bogon shcode]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@bogon shcode]# echo $PWD
/root/shcode
显示当前shell中所有变量
set
定义变量
变量名=值
[root@bogon shcode]# vim var.sh
#!/bin/bash
#定义变量A
A=100
#输出变量需要加上$
echo A=$A
[root@bogon shcode]# chmod u+x var.sh
[root@bogon shcode]# ll
总用量 8
-rw-r--r--. 1 root root 30 5月 7 10:52 hello.sh
-rwxr--r--. 1 root root 70 5月 7 11:17 var.sh
[root@bogon shcode]# ./var.sh
A=100
撤销变量
unset 变量
声明静态变量
readonly变量
注:不能unset。
小知识:
如果要找到第15行,显示行号
:nu
变量名称可以由字母、数字、下划线组成,但是不能数字开头
例如:5A=200(x)
等号两侧不能由空格
变量名称一般为大写
将命令的返回值赋给变量
反引号:运行里面的命令,并把结果返回给变量A
A=`zhang`
A=$(zhang)
export 变量名=变量值
//将shell变量输出为环境变量/全局变量
source 配置文件
//修改后的配置信息立即生效
echo $变量名
//查询环境变量的值
:<
在执行shell脚本时,如果希望获取到命令行的参数信息,可以使用到位置参数变量。
./myshell.sh 100 200
这就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息。
语法 | 描述 |
---|---|
$n | n为数字 $0代表命令本身, 1 − 9 代表第一到第九个参数,十以上的参数需要用大括号包含: 1-9代表第一到第九个参数,十以上的参数需要用大括号包含: 1−9代表第一到第九个参数,十以上的参数需要用大括号包含:{10} |
$* | 命令行中所有的参数,$*把所有的参数看成一个整体 |
$@ | 代表命令行中所有的参数,不过$@把每个参数区分对待 |
$# | 代表命令行中所有参数的个体 |
shell设计者事先定义好的变量,可以直接在shell脚本中使用。
语法 | 描述 |
---|---|
$$ | 当前进程的进程号PID |
$! | 后台运行的最后一个进程的进程号PID |
$? | 最后一次执行的命令的返回状态。 如果这个变量的值为0,证明上一个命令正确执行 如果这个变量的值为非0(具体数字,由命令自己来决定),则证明上一个命令执行不正确。 |
在shell中进行各种运算操作。
"$((运算式))"
"$[运算式]"
expr m + n
expr运算符中间要有空格。
如果希望expr的结果赋给某个变量,使用反引号``。
expr \*,/,% 乘,除,取余
#condition前后要有空格
[ condition ]
#非空返回true,可以使用$?验证(0为true,>1为false)
常用判断条件
=
语句 | 描述 |
---|---|
-lt | 小于 |
-le | 小于等于 |
-eq | 等于 |
-gt | 大于 |
-ge | 大于等于 |
-ne | 不等于 |
语法 | 描述 |
---|---|
-r | 读的权限 |
-w | 写的权限 |
-x | 执行的权限 |
基本语法
if [ 条件判断式 ]
then
代码
fi
if [ 条件判断式 ]
then
代码
elif [ 条件判断式 ]
then
代码
fi
注:[ 条件判断式 ],中括号和条件判断式之间必须有空格。
基本语法
case $变量名 in
"值1")
如果变量的值等于值1,则会执行程序1
;;
"值2")
如果变量的值等于值2,则会执行程序2
;;
...省略其他分支...
*)
如果变量的值都不是以上的值,则会执行此程序
;;
esac
基本语法1
for 变量 in 值1 值2 值3...
do
程序
done
基本语法2
for ((初始值;循环控制条件;变量变化))
do
程序
done
基本语法
while [ 条件判断式 ]
do
程序
done
read(选项)(参数)
选项
选项 | 描述 |
---|---|
-p | 指定读取值时的提示符 |
-t | 指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了 |
参数
变量:指定读取值的变量名
示例:
shell编程和其他编程语言一样,有系统函数,也可以自定义函数。
返回完整路径最后/的部分,常用于获取文件名。
basename [pathname] [suffix]
用于获取文件名(不包括路径)。其中,
pathname
表示要处理的文件路径,suffix
表示要从文件名中删除的后缀。
例如:
以下命令来获取该文件的文件名:
如果我们想要删除
.txt
后缀,可以使用以下命令
用于获取文件路径(不包括文件名)。
dirname [pathname]
pathname
表示要处理的文件路径。
[function] funname[()]
{
Action;
[return int]
}
调用函数名:funname [值]
function
用于声明一个函数,函数名可以任意取名。