文章目录
变量是任何一门语言中都不可缺少的组成部分,用于存放各种数据。 脚本语言在使用变量前通常不需要声明类型,只需要直接赋值即可。
环境变量: 有一些特殊的变量会被shell脚本或者操作系统环境用来存储一些特别的值,这类变量被称为环境变量,也有人叫系统变量。
系统定义的变量 | 意义 |
---|---|
BASH=/bin/bash | Bash Shell 名称 |
BASH_VERSION=4.1.2(1) | Bash 版本 |
HOME=/home/linuxtechi | 用户家目录 |
LOGNAME=LinuxTechi | 当前登录用户的名字 |
OSTYPE=Linux | 操作系统类型 |
PATH=/usr/bin:/sbin:/bin:/usr/sbin | 可执行文件搜索路径 |
PWD=/home/linuxtechi | 当前工作目录 |
SHELL=/bin/bash | Shell 名称 |
USERNAME=linuxtechi | 当前登录的用户名 |
[root@ecs-c13b ~]# echo $BASH/bin/bash[root@ecs-c13b ~]# echo $OSTYPElinux-gnu[root@ecs-c13b ~]#
我们可以查看与进程相关的环境变量:
[root@ecs-c13b ~]# pgrep sshd2970 29858[root@ecs-c13b ~]# cat /proc/2970/environ LANG=en_US.UTF-8PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/binNOTIFY_SOCKET=/run/systemd/notifySSH_USE_STRONG_RNG=0[root@ecs-c13b ~]#
[root@ecs-c13b ~]# 2eee=4 ## 不能以数字开头-bash: 2eee=4: command not found[root@ecs-c13b ~]# name=zhangshan ### 大小写的区别[root@ecs-c13b ~]# NAME=lisi[root@ecs-c13b ~]# echo $namezhangshan[root@ecs-c13b ~]# echo $NAMElisi
[root@ecs-c13b ~]# ctest=mysql[root@ecs-c13b ~]# echo $ctestmysql[root@ecs-c13b ~]# echo $ctest-txtmysql-txt[root@ecs-c13b ~]# echo $ctest.db.log-txtmysql.db.log-txt[root@ecs-c13b ~]# echo {$ctest}db.log{mysql}db.log[root@ecs-c13b ~]# echo ${ctest}db.logmysqldb.log
[root@ecs-c13b ~]# echo $ctestdb.log-txt.log-txt
[root@ecs-c13b ~]# echo date
date
[root@ecs-c13b ~]# echo $(date)
Wed Aug 5 15:53:03 CST 2020
[root@ecs-c13b ~]# echo date
Wed Aug 5 15:53:15 CST 2020
[root@ecs-c13b ~]#
[root@ecs-c13b ~]# date +"%Y-%m"2020-08[root@ecs-c13b ~]# date +"%Y-%m-%d-%H%M%S"2020-08-05-155600[root@ecs-c13b ~]#
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 #显示下一年的日期
注:\转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如$将输出“$”符号,而不当做是变量引用
[root@ecs-c13b ~]# name=zmgaosh[root@ecs-c13b ~]# echo $namezmgaosh[root@ecs-c13b ~]# echo '$name'$name[root@ecs-c13b ~]# echo "$name"zmgaosh
特殊变量 | 含义 |
---|---|
$$ | Shell本身的PID(ProcessID) |
$! | Shell最后运行的后台Process的PID |
$? | 最后运行的命令的结束代码(返回值) |
$- | 使用Set命令设定的Flag一览 |
$* | 所有参数列表。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$@ | 所有参数列表。如"$@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2"…"n” 的形式输出所有参数。 |
$# | 添加到Shell的参数个数 |
$0 | Shell本身的文件名 |
$1 到$n | 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。 |
[root@ecs-c13b ~]# vim ex1[root@ecs-c13b ~]# chmod +x ex1 [root@ecs-c13b ~]# ./ex1 11 12 14Shell 传递参数实例! 执行的文件名:./ex1 第一个参数为:11 第二个参数为:12 第三个参数为:14[root@ecs-c13b ~]#
练习一:
模拟用户登录并显示登录用户
[root@ecs-c13b ~]# vim login.sh[root@ecs-c13b ~]# bash login.sh 请输入用户名: zmgaosh 请输入密码: 123456 Login success,Welcome,zmgaosh[root@ecs-c13b ~]#
本节是循序渐进学运维系列的shell篇-shell变量。 理解了变量对于我们后面的学习很有帮助。