SHELL脚本中的变量的介绍

1 变量的定义及种类

1.1 变量的定义:

变量即在程序运行过程中它的值是允许被改变的量;
变量是用一串固定的字符来标示不固定值的一种方法;
变量是一种使用方便的占位符,用于引用计算机的内存地址,该地址可以存储script运行时可更改的程序信息;
在shell中变量是不能永久保存在系统中的,必须在文件中声明。

1.2 变量的种类:

在shell中变量分为环境级变量,用户级变量,系统级变量。
环境级变量只在当前shell中生效,shell关闭则变量丢失
用户级变量写在用户的骨文件中,只针对当前用户生效
系统级变量被写在系统的配置文件/etc/profile或者/etc/profile.d中,对于所有的用户都生效

1.3 三种变量的定义方法:
1.3.1 环境级变量的定义方法:

只在当前环境中生效 export A=1

SHELL脚本中的变量的介绍_第1张图片
SHELL脚本中的变量的介绍_第2张图片
1.3.2 用户级变量的定义方法:

cd /root
ls -a                             #可以看到root用户的用户级变量文件
vim ~/bash_profile export A=1     #用户级变量的声明,需要用户退出再次登陆时,会读取该文件,
                                   其中的变量随之才会被读取,切换成其他用户不生效
vim ~/bash_history                #使用history -c清空命令后,再次连接,以前的记录仍旧存在,
                                   当清空该文件后,记录不在
vim ~/bash_logout                  #用户退出时的显示,用户级

SHELL脚本中的变量的介绍_第3张图片
在这里插入图片描述
SHELL脚本中的变量的介绍_第4张图片
SHELL脚本中的变量的介绍_第5张图片
SHELL脚本中的变量的介绍_第6张图片
SHELL脚本中的变量的介绍_第7张图片
1.3.3 系统级变量的定义方法:

vim /etc/profile    #所有用户都会读取该文件
export A=1
source /etc/profile

SHELL脚本中的变量的介绍_第8张图片
SHELL脚本中的变量的介绍_第9张图片
1.3.4 深入解释切换用户时加-和不加-的区别

在用su - 切换用户时,如果不加-,不会读取系统环境变量,沿用上一个用户的用户级环境变量

在/etc/profile /etc/bashrc 中分别写入 
export A=2 export B=4                   #/etc/bashrc是shell的环境配置文件
然后source /etc/profile /etc/bashrc
在当前用户echo $A echo $B  
然后更改 /etc/profile 中export A=6,但不是source /etc/profile
su student  还用沿用上一用户环境变量A=2(su student 只读/etc/bashrc:只对shell起作用)
当su - student 中 echo $A A=6 (su - student 读/etc/bashrc /etc/profile)

SHELL脚本中的变量的介绍_第10张图片
SHELL脚本中的变量的介绍_第11张图片

2 字符的转译及变量的声明

2.1 变量名称的规范

*)变量名称的规范
变量名称中通常包含大小写字母,数字,下划线(不是必须)
变量名称规范
WESTOS_LINUX 
Westos_Linux
westoS_Linux 

2.2 字符的转译及变量的声明

*)字符的转译及变量的声明:
\       转译单个字符
""      弱引用,批量转译“”中出现的字符
''      强引用,批量转译‘’中出现的字符

"" 是弱引用 不能引用 `` \ ! $ 
'' 强引用可以引用所有
${} 变量声明
例如:
    A=1
    echo $Ab
    echo ${A}b

SHELL脚本中的变量的介绍_第12张图片
SHELL脚本中的变量的介绍_第13张图片
SHELL脚本中的变量的介绍_第14张图片

3 变量值传递

*)变量值传递

$0  脚本名称
$1  脚本后的第一串字符串
$2  脚本后的第二串字符串
$3  脚本后的第三串字符串
$#  脚本后所跟字符串的个数
$*  脚本后跟的所有字符串,模式为“1 2 3”
$@  脚本后的所有字符串,模式为“1” “2” “3”
$$  当前开启shell的id号

解释$*和$@的区别:
vim test4.sh
#!/bin/bash
for i in "$*"
do
      echo $i
done
当sh -x test4.sh 1 2 3 4   ,执行过程为echo 1 2 3 4 

vim test5.sh
#!/bin/bash
for i in "$@"
do
      echo $i
done
当sh -x test5.sh 1 2 3 4   ,执行过程为echo 1 echo2 echo3 echo4 

SHELL脚本中的变量的介绍_第15张图片
SHELL脚本中的变量的介绍_第16张图片
SHELL脚本中的变量的介绍_第17张图片
SHELL脚本中的变量的介绍_第18张图片
SHELL脚本中的变量的介绍_第19张图片
SHELL脚本中的变量的介绍_第20张图片

4 用read实现变量传递 实现交互式变量

用read实现变量传递  实现交互式变量
  read     WESTOS
  read -s  WESTOS              #-s输入的WESTOS不会回显
  read -p "input:" WESTOS

示例1:vim test6.sh
#!/bin/bash
read -p "what are you looking: " TARGET
echo "$TARGET"

示例2:
#!/bin/bash
read -p "please input ipaddress:  " TARGET
ping -c1 -w1 $TARGET &> /dev/null && {
     echo  $TARGET is up
} || {
     echo  $TARGET is down
}

示例3:
#!/bin/bash
read -p "please input ipaddress:  "  -s TARGET
echo ""
ping -c1 -w1 $TARGET &> /dev/null && {
     echo  $TARGET is up
} || {
     echo  $TARGET is down
}

SHELL脚本中的变量的介绍_第21张图片
SHELL脚本中的变量的介绍_第22张图片
SHELL脚本中的变量的介绍_第23张图片

5 别名的设定与利用命令执行结果设定变量

5.1 linux系统中的别名的设定

*)linux系统中的别名的设定:
alias xie='vim'
vim ~/.bashrc   alias xie='vim'  用户的环境变量 切换到其他用户就不生效
vim /etc/bashrc  alias xie='vim'  shell的配置,永久生效

当想删掉别名:
先把所有配置文件中的全部删掉
然后unalias xie

示例:
alias xie='vim'  xie file   临时操作 退出再次登陆就不行了 相当于变量,退出就不生效
所以写到用户的shell配置文件当中
vim ~/.bashrc    alias xie='vim'   source .bashrc   就可以生效
但是切换到其他用户时,就不生效
vim /etc/bashrc  alias xie='vim'  shell的配置,永久生效 

备注:命令的配置一般写在shell的配置文件/etc/bashrc中,
因为写在/etc/profile中,当用su student切换时,就不会读取当中的设置了 只有在su - student时,才会读取/etc/profile

SHELL脚本中的变量的介绍_第24张图片
SHELL脚本中的变量的介绍_第25张图片
SHELL脚本中的变量的介绍_第26张图片
SHELL脚本中的变量的介绍_第27张图片
SHELL脚本中的变量的介绍_第28张图片
SHELL脚本中的变量的介绍_第29张图片
5.2 利用命令执行结果设定变量

*)利用命令执行结果设定变量
Hostname=$(hostname)
Hostname=`hostname`
$? 是命令在执行完成之后产生的退出值   命令的退出值 不是0就是命令出错
范围是【0-255】
当$0=0时标示命令执行没有错误输出
这个值可以用exit命令执行
例如 exit 66

示例:
echo time is `date`
echo time is $(date)
Time=`date` echo $Time

``通用 
$()shell中使用  不时所有的语言都识别$()
比如:vim test.pl   
#!/usr/bin/perl
echo time is $(date)
perl test.pl   不可以执行 

$?的示例:
命令行输入asddgdgdag
        echo $?   可以查看返回值对照表 看值代表什么含义

1.vim test.sh
#!/bin/bash
echo westos
exit 66

sh test.sh
echo $?   

2.使用的具体场景可以是:
#!/bin/bash
[ $USER="1000" ] && {
	echo error
        exit 66
}

如果不加退出值 sh test.sh  echo $? 会显示0 没有错误 
加了退出值     sh test.sh  echo $? 会显示66 提示错误 

SHELL脚本中的变量的介绍_第30张图片
SHELL脚本中的变量的介绍_第31张图片
SHELL脚本中的变量的介绍_第32张图片
##################################The End #########################

你可能感兴趣的:(Linux)