热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LinuxShell编程之变量、运算符、环境配置文件

一、变量1.1变量命名规则开头为字符或下划线,名字中间中能有字母、数字和下划线组成;变量的长度不超过255个字符;变量名在有效的范围内必须是唯一的;如再次定义则会替换

一、变量

1.1 变量命名规则

  1. 开头为字符或下划线,名字中间中能有字母、数字和下划线组成;
  2. 变量的长度不超过255个字符;
  3. 变量名在有效的范围内必须是唯一的; //如再次定义则会替换上一个变量的值
  4. 在Bash中,变量的默认类型都是字符串型。//即系统把所有值都当作字符串放到变量中,不论这个“字符串”实际上是整数、浮点数等等。

1.2 变量类型

1.2.1 用户自定义变量

1、变量=值 e.g x=5 注意,变量名只能是字母、下划线、数字组成且不能以数字开头,=号左右不可有空格
2、""会解析特殊符号,例如$,''不会解析特殊符号
3、引用变量:$变量名 例如:$x
4、所有变量默认的值都是字符串类型,不可做Math运算。
5、变量叠加 e.g y="$x"123 或者 y=${x}123
6、查看变量 set 会列出系统中所有的变量,包括环境变量和自定义变量
set -u //设定当调用不存在变量时,会提示错误
7、删除变量 unset 变量名 例如:unset x 注意没有$。

1.2.2 环境变量

1.2.2.1 环境变量与用户自定义变量的区别

环境变量是全局变量,用户自定义变量是局部变量。

用户自定义变量只在当前的 shell 中生效,环境变量在当前 shell 和这个 shell 的所有子 shell 中生效。

1.2.2.2 用户自定义环境变量

export 变量名=变量值

变量名=变量值
export 变量名

1.2.2.3 查看环境变量

set 查看所有变量
env 查看环境变量

1.2.2.4 删除环境变量

unset 环境名

1.2.2.5 常用的环境变量

HOSTNAME:主机名
SHELL:当前的 shell
TERM:终端环境
HISTSIZE:历史命令条数
SSH_CLIENT:当前操作环境是用 ssh 连接的,这里记录客户端 ip
SSH_TTY:ssh 连接的终端是 pts/1
USER:当前登录的用户
PATH:系统搜索命令的路径

要想直接通过脚本名执行自己的脚本:
(1)将脚本拷贝至 PATH 中的任意目录下(不建议这样做),例如:cp hello.sh /bin/
(2)将脚本所在目录添加到 PATH 变量中(变量叠加),例如:PATH="$PATH":/root/sh ,但系统重启后失效。

PS1:命令提示符设置

\d:显示日期,格式为"星期 月 日"
\H:显示完整的主机名
\t:显示 24 小时制时间,格式为"HH:MM:SS"
\A:显示 24 小时制时间,格式为"HH:MM"
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\$:提示符。root 用户为"#",普通用户为"$"

1.2.3 语系变量

当前语系查询:locale //直接生效的是LANG变量(默认语系)
LC_ALL:定义整体语系(不常用)

echo $LANG //当前语系环境
echo $LC_ALL //整体语系环境

locale -a | more 查看Linux支持的所有语系环境cat /etc/sysconfig/i18n //下次开机以后的系统环境LANG=zh_CN.UTF-8 //切换成中文

1.2.4 位置参数变量

$n:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 ${10}。
$*:这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体。
$@:这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区分对待。
$#:这个变量代表命令行中所有参数的个数。

例子1:

#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))
变量 sum 的和是 num1 加 num2
echo $sum
打印变量 sum 的值

linux默认变量都是字符串,所以用两个((来进行运算。
执行脚本:
$ ./test.sh 45 76

例子2:

#!/bin/bash
echo "A total of $# parameters"
#使用 $# 代表所有参数的个数
echo "The parameters is:$*"
#使用 $* 代表所有的参数
echo "The parameters is:$@"
#使用 $@ 代表所有的参数

执行脚本:
$ ./test.sh 11 22 33 44

例子3:$* 与 $@ 的区别

#!/bin/bash
for i in "$*"
# $* 中所有参数看成是一个整体,所以这个 for 循环只会循环一次
doecho "The parameters is:$i"
donefor y in "$@"
# $@ 中每个参数都看成是独立的,所以 $@ 中有几个参数,就会循环几次
doecho "Parameter:$y"
done

1.2.5 预定义变量

clipboard.png

前面说到的逻辑或:|| -->ls || echo yes 前面一条语句正确执行,才执行后一条语句。这里就是通过执行命令的返回值来判断逻辑与:&& --> ls qwe && echo no 也是同样的道理。

可以通过一个简单的shell来展示一下:

sl.sh:

#!/bin/bash
ehco "dang qian de PID: $$"find / hello.sh & //&放入后台执行
echo "hou tai de PID: $!"

chmod 755 sl.sh,然后再执行:./sl.sh;可以得到当前的测试的结果

read -n
read -p "please input name " name #-p表示输出提示信息 read [选项] 变量名
read -t 30 #-t 表示等待时间单位为秒 -t 30 表示30秒,若30秒后没有输入数据终止执行脚本
read -s #隐藏信息
echo -e "\n" 换行符

read.sh:

#!/bin/bash
read -p "please input your name:" -t 30 name
#等下输入,如果超过30秒不输入,就终止当前命令
echo $nameread -p "please input your password:" -s pwd
#输入的值是隐藏的,看不见的,但是在sh里面还是可以获取到的,并且输出的
echo -e "/n"
echo $pwdread -p "please input your sex [M/F]:" -n 1 sex
#意思就是只能输入一个字符,且输入之后立马执行
echo -e "/n"
echo $sex

chmod 755 read.sh---> ./read.sh

二、运算符

Shell变量弱类型,默认字符串变量。

2.1 declare声明变量类型

declare [+/-][选项] 变量名

选项:

- 给变量设定类型属性
+ 取消变量的类型属性
-a 将变量声明为数组型
-i 将变量设定为整型(integer)
-x 声明为环境变量
-r 设置为只读属性
-p 显示指定变量的被声明类型

2.1.1 声明数组变量

定义数组:movie[0]=zp movie[1]=tp declare -a movie[2]=live
调用数组:
echo ${movie} 表示调用第一个
echo ${movie[1]} 表示调用第二个
echo ${movie[*]} 表示显示数组中的所有元素

2.1.2 声明环境变量

declare -x test =123 作用与export相同。export命令实际过程是调用declare命令

列出系统中所有变量的类型:declare -p

2.2 数值运算的方法

2.2.1 方法一

aa=11 bb=22
declare -i cc=$aa+$bb

2.2.2 方法二

a=11 b=22
dd=$(expr $aa + $bb)

注:
+旁边一定要留空格。

2.2.3 方法三

gg=$(($aa+$bb)) //推荐该方法

gg=$[$aa+$bb]

注:
$var=$(命令) //先执行命令,然后再把结果给变量。
gg=$(date)//把系统函数输出值复制给gg

clipboard.png

2.3 变量测试

unset y
x=${y-2}
echo $x --> x=2
y="" --> 将y的值设为空值
x=${y-2}
echo $x --> x= 空
y=1
x=${y-2}
echo $x --> x=1

clipboard.png

三、环境变量配置文件

3.1 环境变量配置文件简介

用户自定义变量(本地变量)
环境变量:定义每个用户的操作环境, PATH PS1
eg:

echo $PS1
\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[35;40m\]\W\[\e[0m\]]\$

重新配置配置文件:
source+配置文件
或者. 配置文件

eg :


[root@centos ~]# . .bashrc
[root@centos ~]# source .bashrc

环境变量配置文件简介:

PATH HISTSIZE PS1 HOSTNAME

环境变量配置文件主要是定义对系统操作环境系统生效的系统默认的环境变量

~ 代表家目录,每个用户都会有,家目录只是当前登录用户生效。
放在etc会对所有用户起作用。

以下是关于登录的5个环境变量配置文件。

/etc/profile
/etc/profile.d/*.sh
~/.bash_profile~/.bashrc
/etc/bashrc

3.2 功能

clipboard.png

clipboard.png

clipboard.png



推荐阅读
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 给定一个二维平面上的一些点,通过计算曼哈顿距离,求连接所有点的最小总费用。只有任意两点之间有且仅有一条简单路径时,才认为所有点都已连接。给出了几个示例并给出了对应的输出。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 判断数组是否全为0_连续子数组的最大和的解题思路及代码方法一_动态规划
    本文介绍了判断数组是否全为0以及求解连续子数组的最大和的解题思路及代码方法一,即动态规划。通过动态规划的方法,可以找出连续子数组的最大和,具体思路是尽量选择正数的部分,遇到负数则不选择进去,遇到正数则保留并继续考察。本文给出了状态定义和状态转移方程,并提供了具体的代码实现。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • This article discusses the efficiency of using char str[] and char *str and whether there is any reason to prefer one over the other. It explains the difference between the two and provides an example to illustrate their usage. ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
author-avatar
DHY微学院朱曜宇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有