Shell脚本:shell编程规范与变量

文章介绍了Shell的定义、作用和应用场景,如命令解释器、脚本编写与运行。讲解了重定向和管道操作,以及Shell变量的类型、作用和运算,包括整数变量的算术运算。还讨论了全局变量和特殊变量的使用,以及环境变量和位置变量在脚本中的重要性。
摘要由CSDN通过智能技术生成

一、概述:解释器,编译器,翻译官。

1.定义:

(1)给要执行的命令安顺序保存到一个文本文件。

(2)给文本可执行权限。

(3)可结合各种shell控制语句以完成各种复杂操作。

2.作用:

(1)与内核进行沟通的界面,应用程序。

(2)把代码翻译成二进制,给内核进行处理。

(3)shell是一个特殊的应用程序,介于操作系统和用户之间,扮演的是命令解释器的角色。

(4)运行:用户输入操作指令,由shell解释。再传递给内核,内核执行完返回shell,给用户一个执行结果。

  • shell:(1)脚本语言:按行执行,按顺序执行。

    ​ (2)动态语言:编程语言的一种,用来控制软件应用程序,通常以文本形式保存,只在被调用时,才进行解释或编译。

3.应用场景:

(1)重复性操作

(2)交互性任务

(3)批量事务处理

(4)服务运行状态监控

(5)定时任务执行

4.登录:

用户默认登录shell为/bin/bash。

5.shell脚本基本格式:

(1)编写:


vim first.sh  #编写shell脚本
#! /bin/bash            #这里是脚本声明即解释器,表示以下代码由/bin/bash来翻译执行
# this is my first shell  #描述脚本做什么
cd /boot
echo "当前目录位于:"
pwd
echo "其中以vml开头的文件包括:"    #可执行语句,表示脚本具体的内容
ls -lh vml*
~              

(2)运行:

在这里插入图片描述
在这里插入图片描述

(3)脚本运行方式:

运行方式权限执行方式
sh不需要给执行权限在调试阶段,可以不赋权执行(运行)
bash不需要给执行权限在调试阶段,可以不赋权执行(运行)
source不需要给执行权限在调试阶段,可以不赋权执行(相当于从内核编译,全量执行)
./必须给执行权限在正式上线时,必须赋权执行

二、重定向与管道操作:

1.交互式硬件设备:

默认设备文件编号使用
标准输入键盘0读取执行过程中需要的输入数据
标准输出显示器1命令执行后的输出结果发送到标准输出文件
标准错误输出显示器2执行期间各种错误信息发送到标准错误 文件

2.重定向操作:

类型操作符用途
重定向输入<从制定文件输入内容,而不从键盘输入
重定向输出>将输出结果保存到指定文件(覆盖原有内容)
>>将输出结果追加到指定文件尾部
重定向错误输出2>将错误信息保存到指定文件(覆盖原有内容)
2>>将错误信息追加到指定文件中
混合输出&>将标准输出,标准错误的内容保存到同一文件中

思考:如何在不删除文件的情况下,清空文件内容?

cat /dev/null > passwd.txt

3.管道符:

(1)作用:把管道符左侧命令的输出结果作为右侧命令的处理对象。

(2)格式:命令 选项 | 命令 选项

三、shell变量的作用和类型:

1.作用:用来存放系统和用户需要使用的特定参数(值)。

(1)变量名:使用固定的名称,由系统预设或用户定义。

变量名的使用规范:

1.不使用系统自带的命令作变量名。

2.不使用中文

3.不使用特殊符号开头,_可以作开头。

4.要用注释。

(2)变量值:能够根据用户设置,系统环境的变化而变化。

(3)强引用和弱引用:赋值变量时,单引号和双引号无区别。打印变量时,双引号是弱引用,是变量原本的值。单引号是强引用,就不是原变量的值,变成变量本身,字符串。

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

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

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

在这里插入图片描述
在这里插入图片描述

2.类型介绍:

(1)自定义变量:由用户自己定义,修改,删除。

(2)特殊变量:环境变量,只读变量,位置变量,预定义变量。

(3)变量范围:

类型释义
整数int
字符串string
布尔真假,0或1
浮点1.1 2.2

3.整数变量的运算:

(1)格式:格式:expr 变量1 运算符 变量2

[root@localhost ~]# expr 1 + 2 (加法)
3

[root@localhost ~]# expr 2 - 1 (减法)
1

[root@localhost ~]# expr 2 * 3 (乘法)

6

[root@localhost ~]# expr 2 / 1 (除法)
2
[root@localhost ~]# expr 5 % 2 (取余数)
1

(2)常用运算法则:

i++ 相当于 i= ( ( (( ((i+1)) for i=1 i<=10 i++ i=10 i=9 i=9 i=8 i=7 i=6
i-- 相当于 i= ( ( (( ((i-1)) i=10 10-1=9 i=9 9-1=8 i=8
i+=2 相当于 i= ( ( (( ((i+2))
i++ 是先赋值再加1 i=1+1
++i 是加后再赋值1 1+1=2 2+1=3

(3)bc计算器:(既可以支持整数,又支持浮点计算)

[root@localhost ~]# echo 52 | bc
10
[root@localhost ~]# echo 5/2 | bc
2
[root@localhost ~]# echo "scale=2;4.3
2.4" | bc scale:内部自带全局变量,定义小数点后的位数。
10.32

4.设置变量的作用范围:

(1)格式:

export 变量名

export 变量名=变量值

(2)实操:

[root@localhost ~]# export bk=10
[root@localhost ~]# export pp=20
[root@localhost ~]# vim test.sh 

c=$(($bk+$pp))
echo $c
:wq!
[root@localhost ~]# sh test.sh 
30

5.全局变量:

(1)定义:所有shell环境都可以使用,所有用户自定义变量在于shell中都可以使用。

(2)全局变量的优点:

1.全局范围: 全局变量在整个程序或脚本的各个部分都是可见和可访问的。

2.持久性: 全局变量的生命周期与程序的执行时间相同。它们在程序启动时创建,在程序结束时销毁。

3.共享性: 全局变量可以在程序的不同函数或方法之间共享数据。这样,多个函数可以使用和修改相同的全局变量。

(3)全局变量潜在的副作用:可能导致副作用和潜在的复杂性。

1.因为全局变量是可访问的,所以它们可以被任何函数修改。
2.这可能导致程序状态的不确定性和难以调试的问题。

(4)实操:

[root@localhost ~]# export winwin=9
[root@localhost ~]# export ningning=3
[root@localhost ~]# vim test.sh
c=$(($winwin+$ningning))
echo $c
:wq!
多打开一个终端:
[root@localhost ~]# vim /etc/profile
底行:
export ningning=3
export winwin=9

:wq!
[root@localhost ~]# source /etc/profile
[root@localhost ~]# sh test.sh 
12

6.特殊变量应用:

(1)只读变量:不可以删除,重启后删除。

[root@localhost ~]# readonly a
[root@localhost ~]# echo $a
123
[root@localhost ~]# a=456
-bash: a: 只读变量

(2)环境变量:env(配置工作环境,目录)

在这里插入图片描述

1.作用:系统自带,用于设置工作环境。配置系统行为,控制程序的执行。环境变量所有用户都可以使用,都可见。

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

在这里插入图片描述

(3)位置变量(命令行参数):

1.作用:运行脚本或程序时,传递给他们的值,用于将外部数据传递给脚本执行。

2.当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量。
$n:n为数字,$0代表命令本身。
$1- 9 代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为 9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如第十个参数为{10}

[root@localhost ~]# vim test1.sh
num1=$1
num2=$2
sum=$(($num1 + $num2))
echo $sum

:wq!
[root@localhost ~]# sh test1.sh 1 2
3
[root@localhost ~]# sh test1.sh 3 5
8
num1=${1}
num2=${2}
sum=$(($num1+$num2))
echo $sum
[root@localhost ~]# sh test1.sh 10 11
21

(4)预定义变量:

1.定义:通常是编程语言或脚本解释器提供,根据需要自动设置,更新,不能修改。

2.使用:

作用
$*所有位置参数的内容看成一个整体返回,加双引号后,内容放在一行处理。不加双引号,分行处理。
$@输出脚本后的所有位置参数,且认为每个都是独立的,加双引号就是分行处理。
$?判断上一条命令是否执行成功,成功,返回结果为0。所有非0返回值都是失败。
$0当前执行的程序或进程名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值