Shell编程规范及变量

  • 一、Shell脚本概述
    • 1.1.1 Shell基本概念
    • 1.1.2 Shell脚本应用场景
    • 1.1.3 Shell作用——翻译官
  • 二、shell编程规范
    • 2.1 用户登录shell
    • 2.2 shell脚本的组成
    • 2.3 shell脚本的执行方法
    • 2.4 脚本错误
    • 2.5 重定向
      • 交互式硬件设备
      • 重定向操作
    • 2.6 管道操作
  • 三、Shell 脚本变量
    • 3.1 自定义变量
      • 3.1.1 数值变量的运算
    • 3.2 环境变量
    • 3.3 位置变量
    • 3.4 预定义变量
    • 3.5 使用awk值提取IP值
    • 3.6 全局变量与局域变量
  • 【扩充】

一、Shell脚本概述

1.1.1 Shell基本概念

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

1.1.2 Shell脚本应用场景

  • 重复性操作
  • 交互性任务
  • 批量事务处理
  • 服务运行状态监控
  • 定时任务执行

1.1.3 Shell作用——翻译官

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

二、shell编程规范

2.1 用户登录shell

  • 登录后默认使用的shell程序,一般为/bin/bash
  • 不同shell的内部指令、运行环境等会有所不同
shell 说明
bash $基准于GNU的框架下发展出的shell
csh 语法有点类似于C语言的shell
tcsh 整合了csh,提供更多的功能(增强版)
sh 已经被bash所替换(软链接)
nologin 奇怪的shell,这个shell可以让用户无法登录主机

2.2 shell脚本的组成

  • 脚本申明(解释器): 若第一行为“#!/bin/bash”,表示此行一下的代码语句是通过/bin/bash程序来结实执行,#!/bin/bash为默认解释器,还有其他类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。
  • 注释信息:以“#”开头的语句表示为注释信息,被注释的语句在运行脚本时将不被执行。
  • 可执行语句: 比如 echo命令,用于输出“ ”之间的字符串。

2.3 shell脚本的执行方法

方法一:指定路径的命令,要求文件必须有x权限

  • 指定绝对路径:/root/first.sh
  • 指定相对路径:./first.sh

方法二:指定shell来解释脚本,不要求文件必须有x权限

  • sh 脚本路径:sh first.sh
  • source 脚本路径:.first.sh 或者source first.sh

方法三:source 脚本路径执行shell脚本

2.4 脚本错误

命令错误:命令出错不会影响接下来的命令继续

语法错误:会影响接下来的命令继续

逻辑错误:只能自己去筛查

查找代码的正确:bash -n 脚本名称 (不在当前目录下加绝对路径)   检查语法错误
bash -x 脚本名称 (不在当前目录下加绝对路径)   检查逻辑错误

2.5 重定向

交互式硬件设备

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

类型 设备文件 文件描述编号 默认设备
标准输入 /dev/stdin 0 键盘
标准输出 /dev/stdout 1 显示器
标准错误输出 /dev/stderr 2 显示器

重定向操作

类型 操作 用途
重定向输入 < 从指定文件读取数据
重定向输出 > 将标准输出结果保存到指定的文件,并且覆盖原有文件
>> 将标准输出追加到指定的文件的尾部,不覆盖原有内容
标准错误输出 2> 将错误信息保存到指定文件,并且覆盖原有文件
2>> 将错误信息追加到指定文件的尾部,不覆盖原有内容
混合输出 &>和2>&1 将标准输出,标准错误保存到同—文件中

案例一
将标准输出结果“132456” 保存到文件 passwd.txt; 然后标准输入密码给niangao的时候,从指定文件 passwd.txt中读取数据:

案例二

“>” 会覆盖原有文件
“>>” 不会覆盖原有文件

案例三:&用法

2>/dev/null  ##把错误输出到黑洞
>/dev/null 2>&1  ##标准输出重定向到黑洞,错误输出2重定向到标准输出(标准输出和错误输出都到黑洞)
2>&1>/dev/null   ##错误输出重定向到标准输出,标准输出进黑洞



补充

2.6 管道操作

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

使用格式:
cmd1 命令1 | cmd2 命令2[… | cmdn 命令n]

管道操作

 awk -F:  '{print $1,$3}'   ##意为强制输出信息并且打印第一列和第三列

三、Shell 脚本变量

各种Shell环境中都是用到了“变量”的概念。Shell变量用来存放系统和用户需要使用的特定参数值。

变量的作用
用来存放系统和用户需要使用的特定参数(值)
变量名: 使用固定的名称,由系统预设或用户定义
变量值: 能够根据用户设置、系统环境的变化而变化

变量的类型

自定义变量: 由用户自定义、修改和使用
特殊变量: 环境变量,只读变量,位置变量,预定义变量

环境变量:由系统维护,用于设置工作环境
只读变量: 用于变量值不允许被修改的情况
位置变量:通过命令行给脚本程序传递参数
预定义变量:bash中内置的一类变量,不能直接修改

3.1 自定义变量

1.定义新的变量:

格式: 变量名=变量值
[root@pxw ~]# product=c++

2.查看定义的变量的值:

格式:echo $变量名
[root@pxw ~]# version=3.5.1

3.变量赋值的特殊操作

引号 说明
双引号 允许通过$符号引用其他变量
单引号 禁止引用其他变量值,$视为普通字符
反撇号 命令替换,提取命令执行后的输出结果


4.read命令

--------方法一:read命令获取输入内容---------
read [-p "提示信息"] 变量名
echo $变量名
[root@pxw ~]# echo 192.168.61.128 > ip.txt
[root@pxw ~]# read -p "input your IP" < ip.txt
[root@pxw ~]# echo $IP
192.168.100.10--------方法二:在脚本中编写,在命令行实现read获取---------
read 变量名
echo $变量名

方法一:

方法二:


5.设置变量的作用范围

export 变量名=变量

3.1.1 数值变量的运算

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

expr 变量1 运算符 变量2
var=$(expr 变量1 运算符 变量2)
var=$((变量1 运算符 变量2))
var=$[变量1 运算符 变量2]
let var=变量1 运算符 变量2i++相当于i=$[$i + 1],i++是先赋值,再运算
i--相当于i=$[$i - 1],++i是先运算再赋值
i+=1相当于i=$[$i + 1]----扩充-----
[root@Kiro shell]# expr $[2 * 2] ##在中括号中可以直接用正常运算符

案例一:取余只需要除后的余数


#法一
[root@localhost data]#expr 3 % 2
1#法二:定义变量,使用反撇号
[root@Kiro shell]# sum=`expr $X + $X + $Y`
[root@Kiro shell]# echo $sum
301


案例二:乘号的扩展

案例三:脚本

3.2 环境变量

环境变量指的是出于运行需要而由Linux系统提前创建的一类变量,主要用于设置用户的工作环境,包括用户宿主目录、命令查找路径、用户当前目录、登录终端等。环境变量由Linux系统自动维护,会随着用户状态的改变而改变:

  • 如果修改之后,(uname) ,重启就可以恢复原样;
  • 或者把之前的复制过来直接赋值变量
通过env命令进行查看,都是设定好的:
HOSTNAME=Kiro
SHELL=/bin/bash
HISTSIZE=1000
USER=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root/shell

案例:

3.3 位置变量

为了使用Shell脚本程序时,方便通过命令行为程序提供参数,bash引入了位置变量的概念。

[root@Kiro shell]# cat vars.sh
#!/bin/bashecho $1
echo $2
echo $3
[root@Kiro shell]# ./vars.sh 11 22 cc
11
22
cc

案例:

3.4 预定义变量

与定义变量是bash预先定义好的一类特殊变量,只能使用不能创建新的:

$# :表示命令行中位置参数的个数
$*: 表示所有未知参数的内容
$?: 表示前一条命令执行后的返回状态,为0表示执行正确,非0表示执行出现异常;
$0: 表示当前执行的脚本或程序的名字
$$: 表示当前脚本的进程号

案例:

3.5 使用awk值提取IP值

[root@Kiro shell]# ip=`ifconfig ens33|awk /netmask/'{print $2}'`
[root@Kiro shell]# echo $ip
192.168.61.100

3.6 全局变量与局域变量

  • 全局变量
全局变量用 export
[root@Kiro ~]# export Y=22
[root@Kiro ~]# echo $Y
22

  • 局域变量
局域变量只在当前有效
[root@Kiro ~]# a=100
[root@Kiro ~]# echo $a
100
[root@Kiro ~]# exit
exit
[root@Kiro ~]# echo $a

可在pstree里查看子变量

【扩充】

  • uname -p ##查询处理器型号
  • /dev/null ##空洞,错误输出可以放进去
  • 命令行输入“bc”==Linux的计算机


  • 永久 /etc/profile

Shell脚本——Shell编程规范及变量相关推荐

  1. shell脚本详解(一)——Shell编程规范与变量

    详解Shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官" 二.用户的登录shell ...

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

    shell编程规范与变量 一.概述:解释器,编译器,翻译官. 1.定义: 2.作用: 3.应用场景: 4.登录: 5.shell脚本基本格式: 二.重定向与管道操作: 1.交互式硬件设备: 2.重定向 ...

  3. 【拔刀吧少年】之shell编程规范与变量

    shell编程规范与变量 一.Shell脚本概述 1.shell脚本的概念 2.shell脚本应用场景 3.shell的作用--命令翻译器,"翻译官"(`又称命令的组合`) 二.用 ...

  4. linux 脚本编写 -eq,关于shell脚本基础编程第四篇

    shell脚本基础编程第四篇 本章主要内容:函数 函数 function: function 名称 { 命令 ; } 或 name () { 命令 ; } 定义 shell 函数. 创建一个以 NAM ...

  5. Shell脚本攻略02-玩转变量与环境变量

    概述 变量是任何一种编程语言都必不可少的组成部分,用于存放各类数据. 脚本语言通常不需要在使用变量之前声明其类型.只需要直接赋值就可以了. 在Bash中,每一个变量的值都是字符串. 无论你给变量赋值时 ...

  6. shell脚本——shell函数详解

    shell脚本--shell函数详解 一.shell函数 1.shell函数的概念 2.shell函数的格式 (1)函数的定义 (2)调用函数的方法 3.函数返回值 4.函数传参 5.函数变量的作用范 ...

  7. Shell编程规范与变量(shell编程规范,执行脚本文件的四种方式,管道符号与重定向,shell变量的作用于类型)

    文章目录 Shell脚本概述 Shell脚本的概念 Shell的作用 Shell编程规范 重定向与管道 Shell脚本变量 自定义变量 特殊变量 Shell脚本概述 Shell Script ,She ...

  8. linux 脚本 整数 赋值,shell基础!!熟悉编程规范与变量

    一.SHELL规范 SHELL简单介绍 Bash(/bin/bash)是目前大多数 Linux 版本采用的默认 Shell.Bash 的全称为 Bourne Again Shell,是最受欢迎的开源软 ...

  9. shell脚本编程规范与变量

    shell的作用: 环境: 平台:VMware workstation 14 系统:CentOS Linux release 7.4.1708 (Core) 编写第一个shell脚本:   注: sh ...

最新文章

  1. elasticsearch index 之 put mapping
  2. django模板中使用JQ代码实现瀑布流显示效果
  3. JavaScript 学习中的帮助记忆(日积月累)
  4. XML::Simple与Data::Dumper在Perl中的使用
  5. MDK:assert_param函数未定义的错误:Error: L6218E
  6. iOS开发 Xcode8中遇到的问题及改动
  7. git ssh 绑定 GitLab
  8. 二年级小学生四则运算30道题目
  9. 设置IDEA显示Services窗口,方面服务启动关停等操作
  10. 什么样的人最适合创业?
  11. linux授权命令chmod777_【HDFS篇02】HDFS命令行操作
  12. 解决web网站被挂马清除方法
  13. java 反编译 exe_Java反编译
  14. 计算机的病毒防治教案,小学信息技术《防治计算机病毒-计算机病毒》教案
  15. 罗技G29方向盘linux下的开发
  16. NTC热敏电阻温度计算以及C语言实现
  17. zoj 3551 Bloodsucker 概率DP
  18. hdu 4826 Labyrinth【DP】
  19. 注意力机制-多头注意力
  20. 【CSDN AI周刊】第16期 | 黄仁勋怒怼TPU 龙之队惜败冷扑大师

热门文章

  1. Sklearn实现普通最小二乘法
  2. stm32f107基本资料
  3. 最新emoji表情代码大全_中老年表情包:微信朋友圈早晨问候语带图片 最新早上好问候语动态图片大全...
  4. 关于如何在chrome中下载网页flash视频
  5. mongo-java 实现使用and拼接多个or查询条件
  6. Mc模组开发--Java版的环境搭建
  7. 百度地图坐标转高德地图坐标
  8. 2021年 IOS的发布流程(企业版那 无法下载,无法安装)
  9. 小米网卡驱动linux,小米笔记本pro 15.6寸安装ubuntu16.04无法使用wifi的解决方法
  10. Keep不甘做“工具人”