shell编程规范与变量

本文介绍了shell的基本概念,包括其作为命令解释器的作用,面向过程和面向对象编程的区别,以及shell脚本的定义、应用场景、运行原理和构成要素。内容涵盖了变量管理、标准输入输出、管道符操作、错误处理和特殊符号的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

什么是shell

面向过程语言

面向对象语言 wi

Shell脚本的概念

Shell脚本应用场景

shell的运行原理

脚本的构成

执行脚本命令

脚本执行逻辑

脚本运行错误类别

脚本变量

标准输入输出

管道符操作

变量

设置变量

调用变量

删除变量

重定义变量

追加变量值

常见shell变量类型

特殊符号

echo


什么是shell

shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给换作系统,并处理各种冬样的操作系统的输出结果,输出到屏幕反馈给用户,属于非交互式对话。

面向过程语言
  • 做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了情况B,做什么处理

  • 问题规模小,可以步骤化,按部就班处理

  • 以指令为中心,数据服务于指令

  • 语言:C,shell

面向对象语言 wi
  • 将编程看成是一个事物,对外界来说,事物是直接使用的,不用关心事物内部的情况。而编程就是设置事物能够完成功能。

  • 一种认识世界、分析世界的方法论。将万事万物抽象为各种对象

  • 类是抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合

  • 对象是类的具象,是一个实体

  • 问题规模大,复杂系统

  • 以数据为中心,指令服务于数据

  • 语言:java,python,golang等 云 go k8个字母s 平台

Shell脚本的概念
  • 将要执行的命令按顺序保存到一个文本文件

  • 给该文件可执行权限

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

Shell脚本应用场景
  • 重复性操作

  • 交互性任务

  • 批量事务处理

  • 服务运行状态监控

  • 定时任务执行

shell的运行原理

人类写了一个命令集合,然后用bash ( shell)翻译给硬件,由硬件执行

脚本的构成
  • 脚本声明(解释器):第一行开头"#!/bin/bash"表示此行以下的代码语是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器,#! /bin/python#! /bin/expect

  • 注释信息: 以#开头的语句表示为注释信息,可写中文

  • 可执行语句: 比如echo命令用于输出” “之间的字符串

注意:脚本以.sh结尾,系统可自动识别shell语言,可将shell语法高亮

执行脚本命令
  1. 直接调用shell解释器,加上脚本的名字:bash.脚本名,不需要加上权限

  2. 路径/脚本,路径:相对或绝对,shell本质上也是一个程序,需要权限

  3. source:(.)脚本名,不建议使用,会直接修改当前bash环境

注意:1、2种运行方式,是将程序加载到内存中运行,类似于另开一个运行的模块;3运行方式会在当前环境下直接运行,会修改当前bash的内容

补充:如果想让脚本全局运行(补全),可以将脚本加入$PATH路径下,并且脚本必须有执行权限,执行命令:echo "$PATH"

脚本执行逻辑
  1. 顺序执行:程序按从上到下顺序执行

  2. 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行

  3. 循环执行:程序执行过程中需要重复执行多次某段语句

脚本运行错误类别
  1. 命令错误:不会影响接下来的命令,但本条命令不执行

    [root@localhost test1]#bash -x 脚本
    #执行脚本,可以发现脚本错误
    
    [root@localhost test1]#vim test.sh
    set -e
    #加在脚本的第一行
    #在执行过程中如果出现错误,立即停止执行

  2. 语法错误:影响脚本不能正常运行

    [root@localhost test1]#bash -n 脚本
    #直接检查语法错误,但提示出错行数不一定准确

  3. 逻辑错误:不影响运行,但执行结果与

脚本变量
[root@localhost test1]#vim test.sh
set -u
#如果脚本中变量出错,立即停止执行

#!/bin/bash
dir=/opt

cd		$dir
mv		$dir
find	$dir
touch	$dir

标准输入输出
  • 标准输出

你发了一条指令给电脑操作,电脑会回复结果给你,结果是一定显示在屏幕上

  • 错误输出

电脑没有正确回复,就是错误

  • 标准输入

我们通过键盘、鼠标、扫描仪、话筒等设备,输入给电脑的指令

  • 重定向

    • 改变输出方向,默认电脑数据的输出方向是屏幕

    • 输出到别的 终端设备

    • 输出到文件中

    • ">"和"<"表示输出的方向,>:表示覆盖;>>:表示追加

    • 命令后加&/dev/null:表示将文件移动到垃圾箱

管道符操作

|:将左侧的命令输出结果,作为右侧命令的处理对象

[root@localhost test1]#ps aux |grep bash
#查找所有的进程,并过滤出名称中有bash的进程

变量

变量:可变化的值

常量:不可变化的值

注意:在shell中不区分数据类型,所有的数据都是字符串

设置变量

变量名=变量值(两边都不可有空格)

调用变量

echo $变量名

删除变量

unset 变量名

重定义变量

变量名=变量值

追加变量值

变量名+=变量值

[root@localhost test1]#vim test.sh
dir=/data
#设置变量

[root@localhost test1]#echo $dir
#调用变量

[root@localhost test1]#unset dir
#删除变量

[root@localhost test1]#vim test.sh
dir=/opt
#重定义变量

[root@localhost test1]#vim test.sh
dir=/data
dir+=/opt
#追加变量

[root@localhost test1]#vim test.sh
#!/bin/bash
read -p "请输入第一个数:" num1
read -p "请输入第二个数:" num2

expr $num1 + $num2

例:
[root@localhost test1]#vim test.sh
#!/bin/bash
read -p "请输入行:" line
read -p "请输入列:" list

expr $line \* $list
#运算line*list
#*前必须加转义符,表示乘法;否则表示任意,语法错误
常见shell变量类型
  • 自定义变量

    • export:加在命令前表示当前环境下所有程序都执行

    • expr 变量 运算符 变量:计算

    • echo $[RANDOM%3]:表示任意数取余三,$[]:等同于expr,表示计算

    • echo 变量 运算符 变量 | bc:也表示计算,但只有这个可以运算小数

[root@localhost testl]# vim ji.sh
 #!/bin/bash
read -p“请输入第一个整数:” num1
read -p“请输入第二个整数:” num2
#执行加法运算
sum= expr $num1 + $num2
echo "运算结果为$sum'

[root@localhost testl]# chmod +x ji.sh
[root@localhost testl]# ./ji.sh
请输入第一个整数:6
请输入第二个整数:9
运算结果为15
  • 预定义变量:$?、$$、$*、$@等shell中自带

    • 显示当前bash的uid号:echo $$

预定义符号含义
$?表示前一条命令执行后的返回状态,返回值为0,表示执行正确,返回任何非0值,均表示执行出现异常
$0表示当前执行的脚本或程序的名称,当前脚本的名字
$*表示所有位置参数的内容看成一个整体返回,返回所有
$@表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回,返回所有
$#表示命令行中位置参数的总个数
$当前bash的进程id
$!后台任务最后一个id
[root@localhost testl]#vim content.sh
#!/bin/bash

echo $1
#显示第一个字符
echo $2
#显示第二个字符
echo $3
#显示第三个字符
echo $0
#显示当前脚本名称
echo $#
#显示参数的总数
echo $*
#将参数内容作为一个字符显示
echo $@
#将参数内容分为单个字符,独立显示

[root@localhost testl]#bash content.sh {a..z}
a
b
c
content.sh
26
a b c d e f g h i j k l m n o p q r s t u v w x y z
a b c d e f g h i j k l m n o p q r s t u v w x y z‘


[root@localhost testl]#cat test1.sh test2.sh test3.sh
#!/bin/bash
echo "@的结果"
./test3.sh "$@"
#利用test3.sh打印@的结果

#!/bin/bash
echo "*的结果"
./test3.sh "$*"

#!/bin/bash
echo $1

  • 环境变量:env可以看到所有环境的变量

  • 只读变量:只能读,不能改

  • 位置变量:$1、$2、$3········$n

系统内置变量:PATH、UID、HOSTNAME、USER

查看系统的变量信息

[root@localhost testl]#vim system.sh
#!/bin/bash
ip=`ifconfig ens33 |grep netmask |tr -s " " |cut -d " " -f3` 
#tr -s " "表示压缩空格
cpu=`lscpu |grep 型号名称 |tr -s " " |cut -d " " -f2`
mem=`free -h |grep Mem |tr -s " " |cut -d " " -f2`
disk=`lsblk |grep disk |tr -s " " |cut -d " " -f4`

echo "-----------------systeminfo-------------------"
echo "本机ip:${ip}"
echo "主机名:$(hostname)"
echo "系统版本:$(cat /etc/redhat-release)"
echo "CPU型号:$cpu"
echo "内存大小:$mem"
echo "磁盘大小:$disk"
echo "----------------------------------------------"

[root@localhost testl]#sz system.sh
#导出至指定路径

特殊符号
符号作用
${}定义的变量名的范围,只要写在{}内就不会出错
" "变量在双引号中可识别,弱引用
"变量在单引号中不可识别,强引用
``反撇号,代表引用命令执行的结果,效果等于$()

echo

语法echo  [选项]  " "

[选项]

  • -e:表示输出转义符

常用选项作用
\r光标移至行首,并且不换行
\s当前shell的名称,如bash
\t插入Tab键,制表符
\n输出换行
\f换行,但光标仍停留在原处
\表示插入"\"本身转义
\b表示退格,不显示前一个字符
\c抑制更多的输出或不换行,在内容中间会将后面的字符删除
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值