Shell编程规范及变量

一、Shell脚本编程概述

1.1 shell脚本的概念

  • 将要执行的命令按顺序保存到一个文本文件;

  • 给该文件可执行权限;

  • 可结合各种Shell控制语句以完成更复杂的操作。

1.2Shell脚本应用场景

  • 重复性操作

  • 交互性任务

  • 批量事务处理

  • 服务运行状态监控

  • 定时任务执行

1.3 shell的作用

shell就是与内核沟通的界面、应用程序等。比如你要播放音乐,你的计算机通过你在shell输入的打开音乐的命令,shell在告诉操作系统的内核用户希望打开音乐,内核在通过cpu调度、内存管理、磁盘输入输出等工作,将硬件调动,这时硬件声卡才会工作,硬件才是实际的工作者。

在这里插入图片描述

Shell(壳程序)是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器"的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

1.4 linux中有哪些shell

通过查看etc下面的shells可以发现当前的linux中有哪些shell

在这里插入图片描述

最常用的就是bash、tcsh、csh、sh、nologin这些shell。这些shell都是依据Linux发展者的不同所创造出的不同版本。
bash:基准于GNU的框架下发展出的shell。
csh:语法有点类似于c语言的shell。
tcsh:整合了csh,提供更多的功能。
sh:己经被bash所替换。
nologin:奇怪的shell,这个shell可以让用户无法登录主机。

二、 shell脚本的使用

2.1shell脚本的构成

1.脚本申明(解释器)∶若第一行为"#!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin /bash为默认解释器。还有其它类型的解释器,比如# ! /usr/bin/python、# !/usr/bin/expect。

⒉.注释信息:以"#"开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行

3.可执行语句:比如echo命令,用于输出" "之间的字符串

相关语言
面向对象: JAVA 、 PYTHON 、 C++ 、 C# 、 GO
面向过程: C 、 shell
强类型语言: JAVA 、C 、 C++ 、 C# 、 GO
弱类型语言: PYTHON、 shell 、 PHP
编译型语言:执行前需要先编译,运行速度快
解释性语言:不需要编译即可直接执行,常用于作脚本

尝试编辑一个脚本

在这里插入图片描述

在这里插入图片描述

2.2 运行脚本

运行shell脚本
1、用绝对/相对路径指定脚本文件运行,需要执行用户拥有执行权限x,脚本会在子shell环境中运行
2、用 bash/sh 程序指定脚本文件运行,不需要执行权限,脚本会在子shell环境中运行
3、用 source/. 指定脚本文件运行,脚本会在当前shell环境中运行(会影响当前所在目录、变量的值等因素)

尝试运行刚刚编辑的脚本
1、先给刚刚编辑的脚本添加执行权限

在这里插入图片描述
2、通过绝对路径来运行这个脚本

在这里插入图片描述

3、用 bash/sh 程序指定脚本文件运行(不需要执行权限)
当我把脚本的执行权限取消之后,用相对路径或者绝对路径都是用不了,于是尝试使用bash/sh来指定脚本的运行

在这里插入图片描述

4、用source来执行脚本(source可以用·来代替)

在这里插入图片描述

2.3 重定向和管道操作

2.31交互式硬件设备

●标准输入:从该设备接收用户输入的数据
●标准输出:通过该设备向用户输出数据
●标准错误:通过该设备报告执行出错信息

类型设备文件默认编号默认设备
标准输入stdin0默认设备为键盘
标准输出stdout1默认设备为屏幕
标准错误输出stderr2默认设备为屏幕

2.32 重定向操作

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.33 管道符号

管道操作符:“|”: 将管道符号“|"左侧的命令输出的结果,作为右侧命令的输入(处理对象),同一行命令中可以使用多个管道

[root@localhost ~]#ps aux |wc -l                                    #查看进程数
267
[root@localhost ~]#echo "123123"|passwd --stdin zhangsan            #给张三设置密码

三、shell脚本变量

3.1 shell变量的作用

  • 用来存放系统和用户需要使用的特定参数(值)

  • 变量名:使用固定的名称,由系统预设或用户定义

  • 变量值:能够根据用户设置、系统环境的变化而变化

3.2 shell变量的类型

自定义变量:由用户自己定义、修改和使用;变量名以字母或者下划线开头,而且区分大小写
特殊变量:环境变量,只读变量,位置变量,预定义变量。

在这里插入图片描述

3.3 赋值时使用引号

双引号:允许通过$符号引用其他变量值

单引号:禁止引用其他变量值, $视为普通字符

反撇号:命令替换,提取命令执行后的输出结果,``和$(…)作用相同

在这里插入图片描述

3.4 从键盘输入内容为变量赋值

read -p “提示信息” 变量名 从键盘输入获取值赋给变量

vim sec.sh创建一个脚本
在这里插入图片描述

执行脚本

在这里插入图片描述

在这里插入图片描述

3.5 变量作用范围

默认情况下,新定义的变量只在当前的Shell环境中有效,因此称为局部变量。当进入子程序或新的子Shell环境时局部变量将无法再使用。

在这里插入图片描述

可以通过内部命令export将指定的变量导出为全局变量,使用户定义的变量在所有的子Shell环境中能够继续使用。我在etc/profile文件中添加脚本,并在脚本前加上export后,便可以在所有的环境中使用,而且重启后也不会消失

1、首先在profile文件中添加配置

在这里插入图片描述

2、使用 source 对文件profile重新刷新

在这里插入图片描述

3、查看结果

在这里插入图片描述

3.6 整数变量的算术计算

运算符:+加法 、-减法 、\*乘法 、/除法 、%取余

常见的表达方式

expr 变量1 运算符 变量2 
var=$(expr 变量1 运算符 变量2)
var=$((变量1 运算符 变量2))
var=$[变量1 运算符 变量2]
let var=变量1 运算符 变量2
 
i++相当于i=$[$i + 1],i++是先赋值,再运算
i--相当于i=$[$i - 1],++i是先运算再赋值
i+=1相当于i=$[$i + 1]

在这里插入图片描述

通过这种方式也可以实现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.7 环境变量

  • 使用 env 命令可以查看到当前工作环境下的环境变量

  • 变量USER表示用户名称,HOME表示用户的宿主目录,LANG表示语言和字符集,PWD表示当前所在的工作目录,变量PATH表示可执行程序的默认搜索路径

  • 配置文件:/etc/profile(全局生效)、~/.bash_profile(当前用户环境)

1、

在这里插入图片描述

2、

在这里插入图片描述

3、

在这里插入图片描述

3.8只读变量

readonly命令用于定义只读shell变量和shell函数。readonly命令的选项-p可以输出显示系统中所有定义的只读变量。

readonly 变量名[=值] 设置只读变量,不能被修改值和删除(unset 变量名)

在这里插入图片描述

3.9 位置变量

当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。

在这里插入图片描述

$n:n为数字,$0代表命令本身,1~9代表第一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 ${10}

在这里插入图片描述

在这里插入图片描述

3.10 预定义变量

  • $* 和 $@:都会表示命令或脚本要处理的参数。

  • $* :把所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4 "

  • $@:把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表“$1” “$2” “$3” “$4”

预定义变量表示的意思
$*把所有参数看成以空格分隔的一个字符串整体(单字符串)返回,代表"$1 $2 $3 $4 "
$@把各个参数加上双引号分隔成n份的参数列表,每个参数作为一个字符串返回,代表“$1” “$2” “$3” “$4”
$0表示当前执行的脚本或命令的名称
$#表示命令或者脚本要处理的参数的个数
$?表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常,也常被用于shell脚本中return退出函数并返回的退储值

$*和$@都有双引号的区别:
编辑一个脚本查看一下

在这里插入图片描述
执行脚本

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值