变量是shell传递数据的一种方法。变量是用来表明每一个值的符号名,经过变量,能够在内存中存储数据,也能够在脚本执行中进行修改和访问存储的数据。shell
A、变量名称一般是大写字母,它能够由数字、字母(大小写)和下划线_组成。变量名区分大小写;变量名称不能以数字开头;vim
B、等号 = 用于为变量分配值,在使用过程当中等号两边不能有空格;bash
C、变量存储的数据类型是整数值和字符串值;ssh
D、在对变量赋于字符串值时,建议你们用引号将其括起来。由于若是字符串中存在空格隔符号。须要使用单引号或双引号;ide
E、要对变量进行调用,能够在变量名称前加美圆符号$;spa
F、若是须要增长变量的值,那么能够进行变量值的叠加。不过变量须要用双引号包含“$变量名”或用${变量名}包含;命令行
按照变量的做用能够分红4类:orm
A、用户自定义变量;进程
B、环境变量:这种变量中主要保存的是和系统操做环境相关的数据;图片
C、位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量做用是固定的;
E、预约义变量:是 Bash 中已经定义好的变量,变量名不能自定义,变量做用也是固定的。
按照变量做用范围分为2类:
A、局部变量是 shell 程序内部定义的,其使用范围仅限于定义它的程序,对其它程序不可见。包括:用户自定义变量、位置变量和预约义变量。
B、全局变量是环境变量,其值不随 shell 脚本的执行结束而消失。
变量名命名规则:由字母或下划线打头,不容许数字开头,后面由字母、数字或下划线组成,而且大小写字母意义不一样。在使用变量时,在变量名前加$。
[root@test65-1 ~]# test=1 [root@test65-1 ~]# echo $test 1 [root@test65-1 ~]#
$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 ~]#
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
[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
‘’ 在单引号中全部的字符包括特殊字符($,'',`和\)都将解释成字符自己而成为普通字符。
“” 在双引号中,除了$, '', `和\之外全部的字符都解释成字符自己,拥有“调用变量的值”、“引用命令”和“转义符”的特殊含义。
注:\转义符,跟在\以后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当作是变量引用。
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]#
在 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
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 ~]#
有些变量是一开始执行 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 ~]#
我的公众号: