Linux-初学者系列7_shell编程

在进行服务器集群管理时,需要编写shell程序来进行服务器管理。

shell是一个命令行解释器,他会为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户用shell启动、挂起、停止和编写一些程序。

一、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代表第一到第九个参数,十以上的参数需要用大括号包含: 19代表第一到第九个参数,十以上的参数需要用大括号包含:{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 用于声明一个函数,函数名可以任意取名。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_62181310/article/details/130617716