前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解shell脚本的环境、普通、特殊变量

详解shell脚本的环境、普通、特殊变量

作者头像
老油条IT记
发布2020-09-04 17:04:59
1.8K0
发布2020-09-04 17:04:59
举报
文章被收录于专栏:用户7095785的专栏

#变量介绍 变量就是用一个固定的字代替复杂的内容,该内容里可能还会包含变量、路径、字符串等其它的内容。

#变量类型

代码语言:javascript
复制
分为环境变量(全局变量)和普通变量(局部变量)
环境变量也可称全局变量
普通变量又称局部变量
一、环境变量

环境变量一般用export内置命令导出变量,用于定义shell的运行环境,所有的环境变量都是系统全局变量 #提示1:定义的变量均为大写,环境变量应用于用户进程前,使用export命令导出 #提示2:变量赋值两边应没有空格 #示例:export DIR=/data/

#设置环境变量

代码语言:javascript
复制
#在用户家目录或全局配置中进行设置
.bashrc
/etc/bashrc
/etc/profile

#显示与取消环境变量

代码语言:javascript
复制
#1.通过echo或print命令打印环境变量
$HOME : 用户登录时进入的目录
$UID :当前用户的UID,相当于id-u
$PWD :当前工作目录的绝对路径
$SHELL :当前SHELL
$USER : 当前用户

#示例
[root@game ~]# echo $HOME
/root
[root@game ~]# echo $UID
0
[root@game ~]# echo $PWD
/root
[root@game ~]# echo $SHELL
/bin/bash
[root@game ~]# echo $USER
root

#2.通过env或set显示默认的环境变量
#3.通过unset消除本地变量和环境变量
[root@game ~]# echo $PWD
/root
[root@game ~]# unset PWD
[root@game ~]# echo $PWD

[root@game ~]#

#自定义环境变量

代码语言:javascript
复制
命令:export或declare内置命令

#格式
export 变量名=value
declare -x 变量名 value

#示例
[root@game ~]# export DIRR=guoke
[root@game ~]# declare -x DIRR=guoke

#自定义全局变量示例

代码语言:javascript
复制
[root@game ~]# cat /etc/profile |grep guoke
export DIRR='guoke'
[root@game ~]# source /etc/profile
[root@game ~]# echo $DIRR
guoke
[root@game ~]# env |grep DIRR
DIRR=guoke
二、普通变量

本地变量一般在脚本或命令中进行定义,只在当前的shell中有效

#变量名一般是由字母、数字、下划线组成,可以以字母或下划线开头

#普通变量定义

代码语言:javascript
复制
变量名=value #不加引号
变量名='value' #加单引号
变量名="value" #加双引号

#示例
[root@game test]# cat test.sh
mail=guoke@qq.com
三、特殊变量

#常用的特殊变量

代码语言:javascript
复制
特殊变量	解释
$0	获取当前执行的脚本文件名,如果脚本包含路径,则打印脚本路径
$n	获取第n个执行脚本参入的值,当n大于9,使用{}阔起来
$#	获取脚本传参数得总个数
$*	获取脚本所有传参的参数
$@	获取脚本所有传参的参数
$?	获取上一个命令执行的返回值,0为成功,非0为失败
$$	获取脚本的进程号PID
$!	获取上一次执行脚本的pid
$_	获取上一条命令的最后一个参数值
#获取更多帮助使用man bash,搜索关键字:"Special Parameters"

#详解 1.$0:获取执行脚本的名字,当n大于9,使用大括号{}括起来,防止输出不正确 #示例

代码语言:javascript
复制
#获取脚本的名称路径
[root@game test]# cat test.sh 
#!/bin/bash
echo $0
#执行效果
[root@game test]# sh test.sh 
test.sh

#带路径就显示路径
[root@game test]# sh /server/scripts/test/test.sh 
/server/scripts/test/test.sh

#扩展:dirname,basename dirname:获取脚本的路径 basename:获取脚本的名字

代码语言:javascript
复制
#简单示例
[root@game test]# dirname /server/scripts/test/test.sh 
/server/scripts/test
[root@game test]# basename /server/scripts/test/test.sh 
test.sh

#企业应用

代码语言:javascript
复制
[root@game test]# cat test5.sh 
#!/bin/bash
MY_PATH=$(cd `dirname $0`; pwd)
echo ${MY_PATH}

#执行效果
[root@game test]# sh test5.sh 
/server/scripts/test

2.$n:执行脚本传入的参数值 #简单示例

代码语言:javascript
复制
#接收一个传入的参数
[root@game test]# cat test.sh 
#!/bin/bash
echo $1 #打印脚本传递的第一个参数的值
#执行效果
[root@game test]# sh test.sh guoke
guoke

#接收2个参数
[root@game test]# cat test.sh 
#!/bin/bash
echo $1 $2
[root@game test]# sh test.sh guoke guoke1
guoke guoke1

#当需要传入的参数大于9,使用大括号括起来
[root@game test]# cat test.sh 
#!/bin/bash
echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ${11}

#企业场景定义的传参方式

代码语言:javascript
复制
[root@game test]# cat test6.sh  #执行脚本需要接3个参数
#!/bin/bash
usage(){
   echo "usage:
$0 key start end
example
$0 ff 1 2"
}

3.$#:获取传参的总个数 #简单示例

代码语言:javascript
复制
[root@game test]# cat test.sh 
#!/bin/bash
echo $1 $2 $3 $4 $5 $6
echo $#
#执行效果
[root@game test]# sh test.sh  1 2 3 4 5 6
1 2 3 4 5 6
6

#企业场景应用

代码语言:javascript
复制
[root@game test]# cat test6.sh 
#!/bin/bash
usage(){
   echo "usage:
$0 key start end
example
$0 ff 1 2"
}
[ $# -ne 3 ] && usage && exit 1 
#判断传入的参数如果不等于3,那么就打印帮助函数,退出脚本

4.*:获取当前脚本所有传参的参数,不加引号和@相同

#简单示例

代码语言:javascript
复制
#通过set设置3个参数进行打印
[root@game ~]# set wo me guoke
[root@game ~]# echo $@
wo me guoke
[root@game ~]# echo $*
wo me guoke

5.$?:获取上一个指令的返回值

代码语言:javascript
复制
#说明:$?一般是用来判断命令或脚本是否执行成功,返回值为0就说明执行成功,否则就是失败
#简单示例:判断命令是否执行成功
[root@game ~]# cd /server/scripts/test/
[root@game test]# echo $?
0 #命令执行成功就会返回0
[root@game test]# cd /server/scripts/guoke
-bash: cd: /server/scripts/guoke: No such file or directory
[root@game test]# echo $?
1 #如果命令执行失败就会返回非0

6.$:获取当前执行的脚本的进程号7.!:获取上一次执行脚本的pid

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 老油条IT记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、环境变量
  • 二、普通变量
  • 三、特殊变量
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档