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