Shell基础(二)

2022/2/14 7:14:21

本文主要是介绍Shell基础(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 第二节 Bash变量
    • 2.1 用户自定义变量
    • 2.2 环境变量
    • 2.3 位置参数变量
    • 2.4 预定义变量
  • 第三节 数值运算与运算符
  • 第四节 变量测试*
  • 第五节 环境变量配置文件
    • 5.1 环境变量配置文件简介
    • 5.2 环境变量配置文件作用
    • 5.3 其他配置文件和登录信息


第二节 Bash变量

什么是变量:
变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,如一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字 ,所以很容易引用它。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。

变量设置规则:

  1. 变量名称可以由字母、数字和下划线组成 ,但是不能以数字开头。如果变量名是 “2name”则是错误的。
  2. 在Bash中,变量的默认类型都是字符串型 ,如果要进行数值运算,则必需指定变量类型为数值型。
  3. 默认变量类型全都是字符串型,和其他语言不太一样变量用等号连接值,等号左右两侧不能有空格。
  4. 变量的值如果有空格,需要使用单引号或双引号包括。
  5. 在变量的值中,可以使用“\”转义符。
  6. 如果需要增加变量的值,那么可以进行变量值的叠加。不过变量需要用双引号包含 “$变量名”或用${变量名}包含。
  7. 如果是把命令的结果作为变量值赋予变量 ,则需要使用反引号或$()包含命令。
  8. 环境变量名建议大写,便于区分。

变量的分类:

  1. 用户自定义变量
  2. 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
  3. 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
  4. 预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

2.1 用户自定义变量

name=“yang yang”

# 变量叠加
aa=123
aa="$aa"456
aa=${aa}789

# 变量调用
echo $变量名

# 变量查看
set

# 变量删除
unset 变量名

2.2 环境变量

环境变量:
用户自定义变量只在当前的Shell中生效, 而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效。

# 设置环境变量:
export 变量名=变量值 申明变量
# 查询变量
env 
# 变量调用
echo $变量名 
# 删除变量
unset 变量名 

pstree 树形显示进程数
没有这条命令可以执行以下命令下载:
yum -y install psmisc
yum provides /命令 查看没有的命令的安装包 配合yum -y install使用

系统常见环境变量

PATH:系统查找命令的路径
这便是输入命令之前不用输入绝对路径的根本原因,系统会提前在PATH环境变量里的所有路径中查询一遍有没有你输入的命令,找到之后直接执行
如果你想直接执行shell脚本,不加绝对路径,直接写入PATH环境变量,使用叠加

echo $PATH
# PATH变量叠加
PATH="$PATH":/root/sh 

此后,/root/sh路径里面的执行文件都可以在任意目录下直接执行,不过是临时生效

PS1:定义系统提示符的变量
用来改[root@localhost ~]# 这个显示
\d:显示日期,格式为“星期 月 日”
\h:显示简写主机名。如默认主机名“localhost”
\t:显示24小时制时间,格式为“HH:MM:SS”
\T:显示12小时制时间,格式为“HH:MM:SS”
\A:显示24小时制时间,格式为“HH:MM”
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
#:执行的第几个命令
$:提示符。如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”

2.3 位置参数变量

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

2.4 预定义变量

预定义变量作用
$?最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
$$当前进程的进程号(PID)
$!后台运行的最后一个进程的进程号(PID)
#!/bin/bash
echo “The current process is $$”
#输出当前进程的PID。
#这个PID就是variable.sh这个脚本执行时,生成的进程的PID
find /root -name hello.sh &
#使用find命令在root目录下查找hello.sh文件 #符号&的意思是把命令放入后台执行
echo "The last one Daemon process is $!"

接受键盘输入

read [选项] [变量名]

-p “提示信息”:在等待read输入时,输出提示信息
-t 秒数: read命令会一直等待用户输入,使用 此选项可以指定等待时间
-n 字符数:read命令只接受指定的字符数,就会执行
-s: 隐藏输入的数据,适用于机密信息的输入

第三节 数值运算与运算符

declare声明变量类型

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

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

# 数值运算—方法1
aa=11
bb=22 给变量aa和bb赋值
declare -i cc=$aa+$bb

# expr或let数值运算工具—方法2
aa=11
bb=22 给变量aa和bb赋值
dd=$(expr $aa + $bb) dd的值是aa和bb的和。注意“+”号左右两侧必须有空格,let与expr一样

# “$((运算式))”或“$[运算式]” —方法3(☆☆☆☆☆)
aa=11
bb=22 给变量aa和bb赋值
ff=$(( $aa+$bb ))
gg=$[ $aa+$bb ]

运算符优先级表:

优先级运算符说明
13-, +单目负、单目正
12!, ~逻辑非、按位取反或补码
11*,/, %乘、除、取模
10+, -加、减
9<< , >>按位左移、按位右移
8<=, >=, < , >小于或等于、大于或等于、小于、大于
7== , !=等于、不等于
6&按位与
5^按位异或
4|按位或
3&&逻辑与
2||逻辑或
1=,+=,-=,*=,/=,%=,&=, ^=,赋值、运算且赋值

例子:

aa=$(( (11+3)*3/2 ))
虽然乘和除的优先级高于加,但是通过小括号可以调整运算优先级
bb=$(( 14%3 ))
14不能被3整除,余数是2
cc=$(( 1 && 0 ))
逻辑与运算只有想与的两边都是1,与的结果才是1,否则与的结果是0
dd=$(( 1 || 0 ))
逻辑或运算只要有一边是1,或的结果就是1,两边都为0,或的结果才是0

第四节 变量测试*

用来测试一个变量到底有没有设置,测试表:
变量测试

unset y 删除变量y
x=${y-new} 进行测试
echo $x
显示new,y变量不存在
因为变量y不存在,所以x=new
y="" 给变量y赋值为空
x=${y-new} 进行测试
echo $x
显示空,y为空值
y=old 给变量y赋值
x=${y-new} 进行测试
echo $x
显示old,y变量存在且有值

第五节 环境变量配置文件

5.1 环境变量配置文件简介

# source命令
# 强制使配置文件在修改之后生效,不需要重启
source 配置文件 
. 配置文件

环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如 PATH、HISTSIZE、PS1、HOSTNAME等 默认环境变量。

常见配置文件

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


/etc下的环境变量配置文件是针对所有用户都有效的
而~下的只是对root用户的家目录下有效

5.2 环境变量配置文件作用

以下几个环境变量的配置文件是最主要的:

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

环境变量配置文件调用顺序流程图
在这里插入图片描述
这些是在登陆的时候挨个调用,所以在这里面设置环境变量,登陆之后就会自动设置好

1)登陆输入密码之后,第一步是读取/etc/profile文件

  • USER变量
  • LOGNAME变量
  • MAIL变量
  • PATH变量
  • HOSTNAME变量
  • HISTSIZE变量
  • umask

2)接下来便调用/etc/profile.d/*.sh文件

3)然后就是下面的文件,语言包文件,识别系统自带的语言

4)~/.bash_profile的作用
在PATH变量后面加入了“:$HOME/bin” 这个目录
调用了~/.bashrc文件。

5)~/.bashrc的作用
定义默认别名
调用/etc/bashrc

6)/etc/bashrc的作用
PS1变量
umask
PATH变量
调用/etc/profile.d/*.sh文件

这一块就是进入界面以内,切换shell登陆方式,这种不需要密码,所以和前面的/etc/profile的作用不冲突

5.3 其他配置文件和登录信息

注销时生效的环境变量配置文件
~/.bash_logout
注销登陆时写入

历史命令文件
~/bash_history

Shell登录信息
本地终端欢迎信息:/etc/issue

转义符作用
\d显示当前系统日期
\s显示操作系统名称
\l显示登录的终端号,这个比较常用。
\m显示硬件体系结构,如i386、i686等
\n显示主机名
\o显示域名
\r显示内核版本
\t显示当前系统时间
\u显示当前登录用户的序列号

远程终端欢迎信息: /etc/issue.net

  • 转义符在/etc/issue.net文件中不能使用
  • 是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入“Banner /etc/issue.net”行才能显示(记得重启SSH服务 service sshd restart)

登陆后欢迎信息:/etc/motd
不管是本地登录,还是远程登录,都可以显示此欢迎信息



这篇关于Shell基础(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程