shell study-3day--shell变量及实例

一、SHELL 变量及运用

1)shell变量

变量是shell传递数据的一种方法。变量是用来表明每一个值的符号名,经过变量,能够在内存中存储数据,也能够在脚本执行中进行修改和访问存储的数据。shell

2)变量设置规则

A、变量名称一般是大写字母,它能够由数字、字母(大小写)和下划线_组成。变量名区分大小写;变量名称不能以数字开头;vim

B、等号 = 用于为变量分配值,在使用过程当中等号两边不能有空格;bash

C、变量存储的数据类型是整数值和字符串值;ssh

D、在对变量赋于字符串值时,建议你们用引号将其括起来。由于若是字符串中存在空格隔符号。须要使用单引号或双引号;ide

E、要对变量进行调用,能够在变量名称前加美圆符号$;spa

F、若是须要增长变量的值,那么能够进行变量值的叠加。不过变量须要用双引号包含“$变量名”或用${变量名}包含;命令行

3)变量分类

按照变量的做用能够分红4类:orm

A、用户自定义变量;进程

B、环境变量:这种变量中主要保存的是和系统操做环境相关的数据;图片

C、位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量做用是固定的;

E、预约义变量:是 Bash 中已经定义好的变量,变量名不能自定义,变量做用也是固定的。

按照变量做用范围分为2类:

A、局部变量是 shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量和预约义变量。

B、全局变量是环境变量,其值不随 shell 脚本的执行结束而消失。

4)用户自定义变量

变量名命名规则:由字母或下划线打头,不容许数字开头,后面由字母、数字或下划线组成,而且大小写字母意义不一样。在使用变量时,在变量名前加$。

Eg1:给变量test赋值

[root@test65-1 ~]# test=1 
[root@test65-1 ~]# echo $test
1
[root@test65-1 ~]#

Eg2:变量值叠加,使用${}

$name 是${name}的简化版本,可是在某些状况下,还必须使用花括号引发的方式来消除歧义并避免意外的结果。

[root@test65-1 ~]# test1=access
[root@test65-1 ~]# echo test1
test1
[root@test65-1 ~]# echo $test1
access
[root@test65-1 ~]# echo $test1.log
access.log
[root@test65-1 ~]#

5)命令替换

Date命令:

date 命令是显示或设置系统时间与日期。

-s<字符串>:根据字符串来设置日期与时间。字符串先后必须加上双引号;

<+时间日期格式>:指定显示时,使用特定的日期时间格式

实例:

A、显示当前时间年、月、日

[root@test65-1 ~]# date +"%Y-%m-%d"
2020-10-12

B、显示当前时间年、月

[root@test65-1 ~]# date +"%Y-%m"
2020-10

#显示日期及时间

date +"%Y-%m-%d %H:%M.%S"

#显示日期及时间,使用/分割

date +"%Y/%m/%d %H/%M/%S"

#显示日期及时间,使用-进行分割(备份通常使用该方式)

date +"%Y-%m-%d-%H-%M-%S"

Date命令加减操做:

#显示当前时间(年、月、日)

date +"%Y%m%d"

#显示明天的日期

date -d "+1 day" +%Y%m%d

#显示昨天的日期

date -d "-1 day" +%Y%m%d

#显示上一月的日期

date -d "-1 month" +%Y%m%d

#显示下一月的日期

date -d "+1 month" +%Y%m%d

#显示前一年的日期

date -d "-1 year" +%Y%m%d

#显示下一年的日期

date -d "+1 year" +%Y%m%d

设定时间:

#设置成20201020,这样会把具体时间设置成空 00:00:00

date -s 20201020

#设置具体时间,不会对日期作更改

date -s 15:10:20

#设置所有时间

date -s "2020-10-20 15:10:20"

A、命令中调用date命令

[root@test65-1 ~]# echo date  #只显示date值
date
[root@test65-1 ~]# echo $date #date变量未赋值
 
[root@test65-1 ~]# echo `date` #调用date命令成功
Mon Oct 12 09:59:18 CST 2020
[root@test65-1 ~]# echo $(date) #调用date命令成功
Mon Oct 12 09:59:39 CST 2020
[root@test65-1 ~]# date
Mon Oct 12 10:02:10 CST 2020

6)命令的嵌套使用,使用$( $( ))

[root@test65-1 ~]# find /home/ -name *.log
[root@test65-1 ~]# testtar=$(tar -zcvf home.tar.gz $(find /root/ -name *.txt))
[root@test65-1 ~]# echo $testtar

7)shell 中单引号和双引号区别

‘’ 在单引号中全部的字符包括特殊字符($,'',`和\)都将解释成字符自己而成为普通字符。

“” 在双引号中,除了$, '', `和\之外全部的字符都解释成字符自己,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。

注:\转义符,跟在\以后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当作是变量引用。

Eg:\转义符做用

[root@test65-1 home]# test=1
[root@test65-1 home]# echo $test
1
[root@test65-1 home]# echo \#test
#test
[root@test65-1 home]# echo \$test
$test
[root@test65-1 home]#

A、双引号与单引号区别

[root@test65-1 home]# test=1
[root@test65-1 home]# test1=2
[root@test65-1 home]# echo '$test+$test1'
$test+$test1
[root@test65-1 home]# echo "$test+$test1"
1+2
[root@test65-1 home]#

注:单引号之间的内容原封不动赋值给变量,双引号之间的内容若有特殊符号会保留它的特殊含义。

删除变量:

[root@test65-1 home]# unset test
[root@test65-1 home]# echo $test
 
[root@test65-1 home]#

8)环境变量

bash shell 中,变量分为两类:全局变量和局部变量

全局变量:对于shell会话和全部的子shell都是可见的

局部变量:它只在本身的进程当中使用

A、局部变量

[root@test65-1 home]# test=1 
[root@test65-1 home]# vi 1.sh
#!/bin/bash
echo $test
[root@test65-1 home]# sh 1.sh 
 
[root@test65-1 home]# echo $test
1

#执行1.sh 时,会使用另外一个bash去执行,就访问不到$test的值

B、env 命令查看所全局变量

[root@test65-1 ~]# env
[root@test65-1 ~]# env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

C、使用 export 把这个局部变量输出为全局变量

[root@test65-1 ~]# export test=1
[root@test65-1 ~]# echo $test
1
[root@test65-1 ~]# sh 1.sh 
1
[root@test65-1 ~]#

D、让变量永久生效,能够把定义好的变量写入配置文件

当登陆系统或新开启一个 ssh 链接启动 bash 进程时,必定会加载这 4 个配置文件:

#系统全局环境和登陆系统的一些配置

[root@test65-1 ~]# vim /etc/profile

#shell 全局自义配置文件,用于自定义 shell

[root@test65-1 ~]# vim /etc/bashrc

#用于单独自定义某个用户的 bash

[root@test65-1 ~]# vim /root/.bashrc

#用户单独自定义某个用户的系统环境

[root@test65-1 ~]# vim /root/.bash_profile

9)shell位置变量

Shell解释执行用户的命令时,将命令行的第一个字符做为命令名,而其它字符做为参数。

$0 获取当前执行shell脚本的文件文件名,包括脚本路径,命令自己

$n 获取当前脚本的第n个参数 n=1,2.....n 当 n 大于 9 时 用${10}表示

Eg:

[root@test65-1 ~]# vim test.sh
#!/bin/bash
echo "本 shell 脚本的文件名: $0"
echo "第 1 个参数: $1"
echo "第 2 个参数: $2"
echo "第 3 个参数: $3"
echo "第 4 个参数: $4"
[root@test65-1 ~]# chmod +x print.sh
[root@test65-1 ~]# ./test.sh 1 2 3 4
本 shell 脚本的文件名: ./test.sh
第 1 个参数: 1
第 2 个参数: 2
第 3 个参数: 3
第 4 个参数: 4
[root@test65-1 ~]#

10)特殊变量

有些变量是一开始执行 Script 脚本时就会设定,且不能被修改,但咱们不叫它只读的系统变量,而叫它特殊变量。这些变量当一执行程序时就有了,如下是一些特殊变量:

$* 以一个单字符串显示全部向脚本传递的参数;如"$*"用双引号括起来的状况、以"$1 $2 … $n"的形式输出全部参数
$n  第n个参数值,n=1..9
$#  传递到脚本的参数个数
$$  当前进程的进程号 PID
$?  显示最后命令的退出状态;0 表示没有错误,其余任何值代表有错误
$!  后台运行的最后一个进程的进程号 pid

Eg:

[root@test65-1 ~] vim  test.sh
#!/bin/bash
echo "$* 表示这个程序的全部参数"
echo "$# 表示这个程序的参数个数"
echo "$$ 表示程序的进程 ID"
touch /tmp/b.txt &
echo "$! 执行上一个后台指令的 PID"
echo "$$ 表示程序的进程 ID"
echo "$? 表示上一个程序执行返回结果 "
 
[root@test65-1 ~]# sh test.sh  test
test 表示这个程序的全部参数
1 表示这个程序的参数个数
1684 表示程序的进程 ID
1685 执行上一个后台指令的 PID
1684 表示程序的进程 ID
0 表示上一个程序执行返回结果
[root@test65-1 ~]#

我的公众号:

图片.png

相关文章
相关标签/搜索