千家信息网

理论:详细学习shell编程规范与变量————理论讲解 初学者一定要点进来

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,前言:shell脚本编程规范shell脚本应用场景shell编程规范管道与重定向shell脚本变量揭秘自定义变量特殊变量本次学习了解的是变量语言分为两大类1.强语言:定义变量的时候需要声明数据类型,一
千家信息网最后更新 2026年11月02日理论:详细学习shell编程规范与变量————理论讲解 初学者一定要点进来

前言:

  • shell脚本编程规范
    • shell脚本应用场景
    • shell编程规范
    • 管道与重定向
  • shell脚本变量揭秘
    • 自定义变量
    • 特殊变量

本次学习了解的是变量

语言分为两大类

1.强语言:定义变量的时候需要声明数据类型,一旦声明,就不可变 jave c语言

1整型 init 1 2 3 100

长整型 long

2浮点型 单精度 float 4字节

   双精度  double   8字节

带小数点就是浮点型

3.string 字符串

char 字符 英文字母字符 a 占一个字节

​ 中文汉字字符,男 占两个字节

而在java中,所有字符都占两个字节

4 boolean 布尔值 ture 和false

5 date 日期

int a=10; a

弱语言 :shell javascript python 不需要声明

a=10;

a=10.1;

给a赋予任意含义,都可以

html 标记语言 以标签形式存在,

xml文件格式

json 键:值 key:value a:10;

shell 优点:

​ 变量直接定义,不需要声明,没有面向对象思想,所有的语言编写犹如记流水账

数组 函数

一 : shell脚本概述

1.1 shell脚本的概念

  • 将要执行的命令按照顺序保存到一个文本文件
  • 给该文件可执行的权限,便于运行 +一个x的执行权限
  • 可结合各种shell控制语句以完成更复杂的操作

1.2 shell脚本应用场景

  • 重复性操作
  • 批量化事务处理
  • 自动化运维管理
  • 服务器运行状态监控
  • 定时任务执行
  • ······

首先要先把命令记熟,和语句

二 : shell的作用

2.1 shell的作用--命令解释器,"翻译官"

  • 介于系统内核与用户之间,负责解释命令行

2.2 用户的登陆shell

  • 登陆后默认使用的shell程序,一般为/bin/bash
  • 不同shell的内部命令、运行环境等会有所区别
[root@localhost ~]# cat /etc/shells/bin/sh'/bin/bash'/sbin/nologin/usr/bin/sh/usr/bin/bash/usr/sbin/nologin/bin/tcsh/bin/csh[root@localhost ~]# 

三 :编写第一个shell脚本

3.1 编写脚本代码

  • 使用vi文本编辑器
  • 每行一条Linux命令,按执行顺序依次编写
t@localhost ~]# vi frist.sh#!/bin/bash  'shell脚本固有格式'cd /boot/pwdls -lh vml*[root@localhost ~]# chmod 744 frist.sh [root@localhost ~]# ./frist.sh /boot-rwxr-xr-x. 1 root root 5.7M 10月 23 13:40 vmlinuz-0-rescue-33c124456fa34c50a98483245dfea58d-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64

;表示一句话的结束,可以使用分号同时使用两条命令

[root@localhost boot]# ls;who       '命令用分号隔开可以同时执行两个命令'config-3.10.0-693.el7.x86_64efigrubgrub2initramfs-0-rescue-33c124456fa34c50a98483245dfea58d.imginitramfs-3.10.0-693.el7.x86_64.imginitrd-plymouth.imgsymvers-3.10.0-693.el7.x86_64.gzSystem.map-3.10.0-693.el7.x86_64vmlinuz-0-rescue-33c124456fa34c50a98483245dfea58dvmlinuz-3.10.0-693.el7.x86_64root     :0           2019-11-25 13:43 (:0)root     pts/0        2019-11-25 17:06 (:0)

3.2 执行脚本文件 ./

  • 方法一:脚本文件路径(绝对路径与相对路径)
[root@localhost ~]# ./frist.sh 
  • 方法二: sh 脚本文件路径
[root@localhost ~]# sh frist.sh /boot-rwxr-xr-x. 1 root root 5.7M 10月 23 13:40 vmlinuz-0-rescue-33c124456fa34c50a98483245dfea58d-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64[root@localhost ~]# 
  • 方法三 : source 脚本文件路径
[root@localhost ~]# source frist.sh /boot-rwxr-xr-x. 1 root root 5.7M 10月 23 13:40 vmlinuz-0-rescue-33c124456fa34c50a98483245dfea58d-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64[root@localhost boot]# 

./ 此方法的文件必须要有执行x权限

sh 执行 ,当前路径无变化

source 执行,当前路径有变化

3.3 更完善的脚本构成

  • 脚本声明
  • 注释信息
  • 可执行语句
[root@localhost ~]# vim frist.sh #!/bin/bash#this is my frist shell-script.cd /boot/echo "当前的目录位于:"     '输出友好提示信息'pwdecho "其中以vml开头的文件包括:"ls -lh vml*~             

echo 代表输出语句,输出字符串用双引号

[root@localhost ~]# ./frist.sh 当前的目录位于:/boot其中以vml开头的文件包括:-rwxr-xr-x. 1 root root 5.7M 10月 23 13:40 vmlinuz-0-rescue-33c124456fa34c50a98483245dfea58d-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64

四 : 重定向与管道操作

4.1 交互式硬件设备 0 1 2

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

4.2 重定向操作 >

重定向符号可以用来写日志文件

[root@localhost ~]# chattr +i /etc/passwd   '给账号文件加锁'[root@localhost ~]# lsattr /etc/passwd      '查看已枷锁'----i----------- /etc/passwd[root@localhost ~]# useradd zhaoyun         '测试'useradd:无法打开 /etc/passwd        '标准错误输出'[root@localhost ~]# useradd zhaoyun 2> err.txt      '使用2>重定向'[root@localhost ~]# lsanaconda-ks.cfg  frist.sh              test.sh  模板  图片  下载  桌面err.txt          initial-setup-ks.cfg  公共     视频  文档  音乐[root@localhost ~]# cat err.txt '查看'useradd:无法打开 /etc/passwd

4.3 管道操作符号"|"

  • 将左侧的命令输出结果,作为右侧命令的处理对象
'cmd1 | cmd2 [... | cmdn]
[root@localhost ~]# grep "bash$" /etc/passwdroot:x:0:0:root:/root:/bin/bashgsy:x:1000:1000:gsy:/home/gsy:/bin/bash[root@localhost ~]# grep "bash$" /etc/passwd | awk -F: '{print $1,$7}'root /bin/bashgsy /bin/bash[root@localhost ~]# 

正则表达式三剑客

grep egrep 老大 过滤关键字

sed 老二 按行读取

awk 老三 按列读取数据

awk -F 指定分隔符 如果不加-F,则默认分隔符为制表符或空格

'{print 打印 $1 第一个参数 $7 第七个参数}'

$1 $2 代表位置变量

[root@localhost ~]# df -Th文件系统                类型      容量  已用  可用 已用% 挂载点/dev/mapper/centos-root xfs        20G  7.6G   13G   38% /devtmpfs                devtmpfs  977M     0  977M    0% /devtmpfs                   tmpfs     993M     0  993M    0% /dev/shmtmpfs                   tmpfs     993M  9.0M  984M    1% /runtmpfs                   tmpfs     993M     0  993M    0% /sys/fs/cgroup/dev/sda1               xfs       6.0G  161M  5.9G    3% /boot/dev/mapper/centos-home xfs        10G   37M   10G    1% /hometmpfs                   tmpfs     199M   20K  199M    1% /run/user/0/dev/sr0                iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64[root@localhost ~]# df -Th | awk '{print $1,$2,$6}'文件系统 类型 已用%/dev/mapper/centos-root xfs 38%devtmpfs devtmpfs 0%tmpfs tmpfs 0%tmpfs tmpfs 1%tmpfs tmpfs 0%/dev/sda1 xfs 3%/dev/mapper/centos-home xfs 1%tmpfs tmpfs 1%/dev/sr0 iso9660 100%

五 : shell变量的作用、类型

5.1 变量的作用

  • 为灵活管理limux系统提供特定参数,有两层意思
    • 变量名:使用固定的名称,由系统预设或用户定义
    • 变量值:能够根据用户设置、系统环境的变化而变化
  • 变量的类型
    • 自定义变量:由用户自己定义、修改和使用
    • 环境变量:由系统维护,用于设置工作环境
    • 位置变量:通过命令行给脚本程序传递参数
    • 预定义变量:Bash中内置的一类变量,不能直接修改

5.2 定义一个新的变量--自定义变量 = echo

  • 变量名以字幕或下划线开头,区分大小写,建议全大写

    • 变量名=变量值
  • 查看变量的值

  • echo $变量名
[root@localhost ~]# addr=192.168.100.100[root@localhost ~]# echo $addr192.168.100.100[root@localhost ~]# addr=10[root@localhost ~]# echo $addr10[root@localhost ~]# num=$addr[root@localhost ~]# addr=20[root@localhost ~]# echo $addr $num20 10[root@localhost ~]# product=puthon[root@localhost ~]# version=3.7[root@localhost ~]# echo $product $versionputhon 3.7[root@localhost ~]# echo $product2.8    '当变量名与数字连起来时,则不显示'.8[root@localhost ~]# echo $product 2.8puthon 2.8[root@localhost ~]# [root@localhost ~]# echo ${product}2.8  '想要的出来的结果与数字连在一起,就需要用上{}符号'puthon2.8

=号是赋值符号,把右边的值赋予给左边的值

addr="192.168.100.100";

_abc="hello";

变量开头不可以以数字和汉字为开头,只可以为字母或者下划线

java的命名方法叫字下美人数骆驼

骆驼是骆驼命名法

输出时,要把变量前面加$符号

变量赋值相当于在内存中开辟了一个存储空间,把赋予的值放在空间内

5.3 赋值时使用引号

  • 双引号:允许通过$符号引用其他变量值,即在可以代表字符串的情况下,若是有$存在也可以代表标量
  • 单引号:禁止引用其他变量值,$是为普通字符,即视为字符串,不识别变量符号
  • 反撇号:命令替换,提取命令执行后的输出结果
  • 变量=反撇号 相当于变量=$()
[root@localhost ~]# ps aux |wc -l204[root@localhost ~]# num=`ps aux | wc -l`[root@localhost ~]# echo $num203[root@localhost ~]# abc=$(ps aux | wc -l)[root@localhost ~]# echo $abc203

请输入你想管理的服务 如何管理你的服务(选项:start,status,stop)

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

  • read [-p 提示信息] 变量名
[root@localhost ~]# vim demo.txt#!/bin/bash#this is testread -p "请输入一个整数:" scoreecho "你的成绩为$score"[root@localhost ~]# sh demo.txt 请输入一个整数:996你的成绩为996~                         

从控制台的输入和输出

java的操作

5.5 设置变量的作用范围 export 设置全局可用

  • 格式1:export 变量名
  • 格式2:export 变量名=变量值
  • 两种格式可以混合使用

export可以把变量定义为全局变量,这样的话,不管是切换bash环境,还是切换用户都可以使用该变量

[root@localhost ~]# echo $abc203[root@localhost ~]# bash[root@localhost ~]# echo $abc[root@localhost ~]# exitexit[root@localhost ~]# echo $abc203[root@localhost ~]# export $abc     '只识别变量名'bash: export: `203': 不是有效的标识符[root@localhost ~]# export abc[root@localhost ~]# bash[root@localhost ~]# echo $abc203[root@localhost ~]# exitexit[root@localhost ~]# 

5.6 整数变量的运算 expr

  • expr 变量1 运算符 变量2 [运算符 变量3].。。。。。
  • 常用运算符
    • 加法运算:+
    • 减法运算:-
    • 乘法运算:* 乘法必须要加\,因为在shell语言中,*代表通配符号
    • 除法运算:/
    • 求模(取余)运算:%
[root@localhost ~]# expr 3 + 25[root@localhost ~]# expr 9 - 10-1[root@localhost ~]# expr 9 / 100[root@localhost ~]# expr 10 / 91[root@localhost ~]# expr 10 / 81[root@localhost ~]# expr 6 / 32[root@localhost ~]# expr 3 \* 26[root@localhost ~]# expr 3 * 2expr: 语法错误[root@localhost ~]# expr 39 % 54[root@localhost ~]# echo $(expr 3 + 3)6[root@localhost ~]# sum='expr 3 + 3'    '单引号'[root@localhost ~]# echo $sumexpr 3 + 3[root@localhost ~]# sum=`expr 3 + 3`    '反撇号'[root@localhost ~]# echo $sum6

六 : 特殊的shell变量

6.1 环境变量

  • 由系统提前创建,用来设置用户的工作环境
  • 配置文件: /etc/profile、~/.bash_prolile

6.2 常见的环境变量

  • PWD\、PATH
  • USER、SHELL、HOME
[root@localhost ~]# vim /etc/profileMAIL="/var/spool/mail/$USER"export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL[root@localhost ~]# echo $MAIL/var/spool/mail/root[root@localhost ~]# echo $HOSTNAMElocalhost.localdomain[root@localhost ~]# echo $PATH/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin[root@localhost ~]# PATH="$PATH:/root"[root@localhost ~]# echo $PATH/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin:/root

:加环境变量

6.3 位置变量

  • 表示为$n,n为1~9之间的数字

  • [root@localhost ~]# ./myprog.sh 'one' two three four five 'six'                            '$1,第一个位置参数'          '$6,第六位置参数'
[root@localhost ~]# vim demo.shsum=0sum=`expr $1 + $2`echo "总和为$sum"echo "执行的脚本是$0"echo "参数的个数是$#"echo "详细内容是$*"cho "执行成功$?"[root@localhost ~]# sh demo.sh 70 80总和为150执行的脚本是demo.sh参数的个数是2详细内容是70 80执行成功0

统计是$#,

除此之外还有$? 是否执行成功,成功是0,不成功是非0值

详细内容是$*

6.4 预定义变量

  • $#:命令行中位置变量的个数
  • $*:所有位置变量的内容
  • $?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
  • $0:当前执行的进程/程序名

/dev/null 类似一个拥有无限容量的目录,所有不用的文件都可以放到里面,一旦放进去,无法找回,慎用

跟/dev/null类似的还有/dev/zero,一个拥有无限大的文件,两个都做测试使用

总结

  • 重定向与管道操作
  • 自定义变量的定义、查看、引用、赋值、作用范围
  • 数值变量的运算
  • 环境变量、位置变量、预定义变量的作用与用途

实验

实验环境

  • 为了集中查看linux服务器各方面的运行情况,管理员(root)希望定制自己的登陆环境,以便自动显示监控信息。另外,通过编写简单的shell脚本,熟悉Linux自动化管理的基本途径

需求描述

  • 编写登陆欢迎脚本welcome.sh
  • 编写服务控制脚本实现start、stop、status 功能
#!/bin/bashusername=`whoami`percent=20echo "====欢迎你, $username===="echo "以下分区使用率超过$percent%"df -Th  | awk -v percent=$percent 'BEGIN {NR!=1} {if ($6 > percent){print $7"\t"$6} }'[root@localhost bash]# echo "/root/bash/welcome.sh" >> /root/.bashrc[root@localhost bash]# su - rootLast login: Mon Nov 25 18:44:16 GMT 2019 on pts/2====欢迎你, root====以下分区使用率超过20%Mounted Use%/ 25%/boot 33%

然后把这个脚本的绝对路径写入到~/.bashrc中即可

#!/bin/bash#this is zuoyesystemctl stop firewall.sevricesetenforce 0read -p "请输入你想管理的服务:" scoreread -p "如何管理你的服务(选项:start,status,stop)" scoreasystemctl $scorea $scoreecho "systemctl $scorea $score"
变量 脚本 文件 命令 环境 输出 运算 字符 用户 位置 参数 系统 路径 管理 输入 作用 符号 语言 服务 成功 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 蓝思科技飞鸽互联网 北京路客互联网科技有限公司 互联网为科技 北京互联网科技 互联网科技集团 菲比寻常互联网科技 互联网科技类展会 蓝色互联网科技 济南和联互联网科技有限公司 消费医药和互联网科技 广西互联网科技孵化中心 玉溪新华互联网科技好不好 科技赋能视角下互联网保险发展 上海京穆互联网科技有限公司 互联网科技实习生岗位 富国互联网科技002692 艺电能源互联网科技有限公司招聘 互联网科技手抄报图片 安徽九吞吴互联网科技有限公司 科技发展第三阶段互联网时代 重生之互联网科技帝国 中国互联网科技股 哈尔滨秒房互联网科技有限公司 千方科技属于互联网企业吗 企晟互联网信息科技有限公司 互联网第三次科技革命特征 互联网企业科技类企业如何做账 江苏苏星互联网科技有限公司 好易买互联网科技 互联网科技企业文化
0