欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > shell编程规范与变量

shell编程规范与变量

2024/10/24 9:25:41 来源:https://blog.csdn.net/minly12/article/details/139847992  浏览:    关键词:shell编程规范与变量

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

Shell脚本概述

交互;非交互

Bash(/bin/bash)是目前大多数 Linux 版本采用的默认 Shell,(BourneAgainShell)

编写脚本执行的方式

  • source .点(在当前的解释器下执行脚本中的指令)
  • bash sh(先打开子一级的bash,子bash执行指令,退出)
  • ./跟bash差不多,但需要执行权限:(chmod +x 文件名)
1、重定向
    1. 标准输出(STDOUT):屏幕;命令将执行后的输出结果发送到标准输出文件
      1. 正确信息重定向输出:1>或>
      2. 错误信息重定向输出:2>
      3. 所有信息重定向输出:&>
      4. 不覆盖原内容,追加内容输出:>>
    2. 标准输入(STDIN):键盘;命令将从标准输入文件中读取在执行过程中需要的输入数据
      1. 重定向输入:目标文件 --stdin < 源文件(将源文件内容写入目标文件) ##需要注意 SELinux 会影响此命令执行,若执行失败可尝试关闭 SELinux
    3. 标准错误(STDERR):屏幕;命令将执行期间的各种错误信息发送到标准错误文件
      1. 错误重定向使用“2>”操作符,其中“2"是指错误文件的编号
2、管道符操作
使用grep命令和awk命令
[root@localhost ~]# grep "/bin/bash$" /etc/passwd | awk -F:'{print$1,$7}'

一、Shell变量

1、自定义变量

定义变量的基本格式为“变量名=变量值”,等号两边没有空格。变量名称需以字母或下划线开头,名称中不要包含特殊字符和数字(如+、-、*、1、.、?、%、&、#等)

2、查看和引用变量的值
      • echo 命令可以查看变量,可以在一条 echo 命令中同时査看多个变量值
[root@localhost ~]# echo $Product
Python
[root@localhost ~]# echo $Product $Version
Python 2.7.13
      • 当变量名称容易和紧跟其后的其他字符相混淆时,需要添加大括号“{}”将其括起来,否则将无法确定正确的变量名称,对于未定义的变量,将显示为空值
[root@localhost ~l# echo $Product2.5                //变量 Product2.5 并未定义
5
[root@localhost ~l# echo $fProduct}2.5
Python2.5
3、变量赋值的特殊操作

(1)双引号("")

      • 双引号主要起界定字符串的作用,特别是当要赋值的内容中包含空格时,必须以双引号括起来;其他情况下双引号通常可以省略
      • 在双引号范围内,使用“$”符号可以引用其他变量的值(变量引用),从而能够直接调用现有变量的值来赋给新的变量
[root@localhost ~]# PYTHON=Python 2.7.13            //错误的赋值
bash: 2.7.13: command not found
[root@localhost ~]# PYTHON="Python 2.7.13"         //正确的赋值
[root@localhost ~l# echo $PYTHON
Python 2.7.13[root@localhost ~]# PyVersion="Python $Version"            //以变量的值进行赋值
[root@localhost ~l# echo $PyVersion
Python 2.7.13

(2)单引号(' ')

      • 当要赋值的内容中包含$、“、\等具有特殊含义的字符时,应使用单引号括起来。在单引号的范围内,将无法引用其他变量的值,任何字符均作为普通字符看待,但赋值内容中包含单引号(')时,需使用!符号进行转义,以免冲突
[root@localhost ~]# PyVersion='Python $Version'    //$符号不能再引用变量
[root@localhost ~]# echo $PyVersion            //原样输出字符串
Python $Version

(3)反撇号(``)

      • 反撇号主要用于命令替换,允许将执行某个命令的屏幕输出结果赋值给变量。反撇号括起来的范围内必须是能够执行的命令行,否则将会出错
[root@localhost ~]# ls -lh `which useradd`
-rwxr-x---.1 root root 101K8月22011 /usr/sbin/useradd
      • 需要注意的是,使用反撇号难以在一行命令中实现嵌套命令替换操作,这时可以改用“$()"来代替反撇号操作,以解决嵌套的问题
[root@localhost ~]# rpm -qc $(rpm -gf $(which useradd))
/etc/default/useradd
/etc/login .defs

(4)read命令

      • 使用 Bash 的内置命令 read 来给变量赋值
      • read 命令用来提示用户输入信息,从而实现简单的交互过程。执行时将从标准输入设备(键盘)读入一行内容,并以空格为分隔符,将读入的各字段依次赋值给指定的变量(多余的内容赋值给最后一个变量)
[root@localhost ~]# read ToDir1
/opt/backup/                    //输入变量 ToDir1 的值为/opt/backupl
[root@localhost ~]# echo $ToDir1
/opt/backup/
      • read 命令可以结合“-p”选项来设置提示信息,以便告知用户应该输入什么内容等相关事项
[root@localhost ~]# read -p"请指定备份存放目录:"ToDir2
请指定备份存放目录:/opt/backup
[root@localhost ~l# echo $ToDir2
/opt/backup
4、设置变量的作用范围

export 将指定的变量导出为全局变量,用户可以同时指定多个变量名称作为参数(无须使用“$”符号),变量名之间以空格分隔

使用 export 导出全局变量的同时,也可以为变量进行赋值,这样在新定义全局变量时就不需要提前进行赋值了

[root@localhost ~]# echo "$Product $Version"            //查看当前定义的变量值
Python 2.7.13
[root@localhost ~]# export Product Version            //将 Product、Version 设为全局变量
[root@localhost ~]# bash
[root@localhost ~# echo "$Product $Version"            //进入子 Shell 环境
Python 2.7.13                    //可以调用父 Shell 的全局变量
[root@localhost ~l# exit            //返回原有的 Shell 环境[root@localhost ~l# export FQDN="www.ib-aptech.com.cn"
[root@localhost ~]# echo $FQDN
www.ib-aptech.com.cn
5、数值变量的运算
expr   变量1($1) 运算符  变量2($2)[运算符变量 3]...
+:加法运算
-:减法运算
\*:乘法运算,注意不能仅使用“*”符号,否则将被当成文件通配符
/:除法运算
%:求模运算,又称为取余运算,用来计算数值相除后的余数

二、Shell变量

1、环境变量
  • env
  • PATH
环境变量的配置文件
[root@localhost ~]# vim /root/.bash_profile
[root@localhost ~]# source /root/.bash_profile            //读取并执行文件中的配置,无需重启
2、只读变量

Shell 变量中有一种特殊情况,一经设定,其值是不可改变的,这种变量被称为只读变量。在创建变量的时候可将其设置为只读属性,也可以将已存在的变量设置为只读属性,只读变量主要用于变量值不允许被修改的情况

[root@localhost ~l# name=cloud
[root@localhost ~l# readonly name            //设置为只读变量
[root@localhost ~l# echo $name
cloud
[root@localhost ~# name=yun        
-bash: name: readonly variable            //只读变量不可以被重新赋值
3、位置变量

为了在使用 Shel 脚本程序时,方便通过命令行,为程序提供操作参数,Bash 引入了位置变量的概念。当执行命令行操作时,第一个字段表示命令名或脚本程序名,其余的字符串参数按照从左到右的顺序依次赋值给位置变量

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

[root@localhost ~]# vim adder2num.sh
#!/bin/bash
SUM='expr $1 + $2
echo "$1 + $2 = $SUM"
[root@localhost ~]# chmod +x adder2num.sh
[root@localhost ~]# ./adder2num.sh 12 34            //$1 为 12、$2 为 34 的情况
12+34=46
[root@localhost ~]# ./adder2num.sh 56 78            //$1为 56、$2 为 78 的情况
56+78=134
4、预定义变量
  • 预定义变量是由 Bash程序预先定义好的一类特殊变量,用户只能使用预定义变量,而不能创建新的预定义变量,也不能直接为预定义变量赋值。预定义变量使用“$”符号和另一个符号组合表示
    • $#:表示命令行中位置参数的个数
    • $*:表示所有位置参数的内容
    • $0:表示当前执行的脚本或程序的名称
    • $?:表示前一条命令执行后的返回状态,返回值为0表示执行正确,返回任何非 0值均表示执行出现异常
    • $!上一个父进程号
    • $$本进程号

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com