【Linux学习笔记30】shell脚本变量

1. 变量


1.1 变量的定义


变量就是内存一片区域的地址


1.2 变量的类型


  1. 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

  2. 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

  3. shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行


2. shell脚本中变量的定义方法


export命令用于将shell变量输出为环境变量,或者将shell函数输出为环境变量。

一个变量创建时,它不会自动地为在它之后创建的shell进程所知。而命令export可以向后面的shell传递变量的值。当一个shell脚本调用并执 行时,它不会自动得到原为脚本(调用者)里定义的变量的访问权,除非这些变量已经被显式地设置为可用。export命令可以用于传递一个或多个变量的值到任何后继脚本。


-f
代表[变量名称]中为函数名称
-n
删除指定的变量
(变量实际上并未删除,只是不会输出到
后续指令的执行环境中)
-p
列出所有的shell赋予程序的环境变量

在这里插入图片描述

2.1 环境级别


export 变量=X :传递变量值

环境关闭后变量失效

扫描二维码关注公众号,回复: 12166308 查看本文章

在这里插入图片描述
在这里插入图片描述

2.2 用户级别


  1. vim ~/.bash_profile
  2. 写入 export 变量=X
  3. source ~/.bash_profile

在这里插入图片描述
在这里插入图片描述

2.3 系统级别


系统级别 方法1:

  1. vim /etc/profile(不建议写在主配置文件)
  2. 写入 export 变量=X
  3. source /etc/profile

在这里插入图片描述
在这里插入图片描述

系统级别 方法2:

  1. vim /etc/profile.d/XXX.sh:子配置目录下的自定义脚本中
  2. 写入 export 变量=X
  3. source /etc/profile.d/XXX.sh

在这里插入图片描述

2.4 变量名称


建议:短名称用大写字母;长名称用"_"区分子类

  • 命名只能使用英文字母,数字和下划线
  • 首个字符不能以数字开头
  • 中间不能有空格
  • 不能使用标点符号
  • 不能使用bash里的关键字(可用help命令查看保留关键字)

3. 变量的转义


\
转义单个字符
" "
弱引用,批量转译个数字符 (不能转译\ ` $ !)
' '
强引用

在这里插入图片描述

4. 变量的声明


花括号{ }是为了帮助解释器识别变量的边界

a=1
echo $ab
echo ${a}b

在这里插入图片描述



5. 变量的数组


数组名=(值1 值2 ... 值n)
${数组名[下标]}	#读取数组格式

示例1:

a=(1 2 3 4 5)
${a[0]}	数组第一个元素
${a[-1]}	数组最后一个元素
${a[*]}	所有元素
${a[@]}	所有元素
${a[*]:1:4}	第2-5个元素
${a[@]:1:4}	第2-5个元素
${#a[@]}	元素个数
${#a[*]}	元素个数

在这里插入图片描述

示例2:

IP=(`ifconfig ens3 | grep -E "inet\>"`)
echo ${IP}	第一个元素
echo ${IP[1]}	第二个元素
echo ${IP[@]}	所有元素
echo ${#IP[@]}	元素个数

在这里插入图片描述



6. 命令的别名设定


1. 临时设定

alias XXX=‘vim’

在这里插入图片描述


2. 只针对当前用户生效

  1. vim ~/.bashrc
  2. 写入alias XXX=‘vim’
  3. source ~/.bashrc

3. 对系统所有用户生效

  1. vim /etc/bashrc
  2. 写入alias XXX=‘vim’
  3. source /etc/bashrc

4. 删除当前环境中的alias

unalias XXX



7. 用户环境变量


环境变量:用户在操作系统时使用到的命令搜索路径


设定方式1: 当前用户

  1. vim ~/.bash_profile
  2. 写入export PATH=$PATH:目录
  3. source ~/.bash_profile

设定方式2: 系统所有用户

  1. vim /etc/bash_profile
  2. export PATH=$PATH:目录
  3. source /etc/bash_profile

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述



8. 利用命令的执行结果设定变量


8.1 直接利用命令执行结果


优先执行:

  • $(命令)
  • `命令` ` 为反引号)
示例:
TEST=`hostname`	
TEST=$(hostname)

8.2 脚本中的传参


非交互模式

$0
脚本本身
$1
脚本输入后的第一串字符
$2
脚本输入后的第2串字符
$3
脚本输入后的第3串字符
$#
脚本后输入字符串的个数
$*
脚本输入的所有字符(一个整体)
$@
脚本输入的所有字符(多个整体)
$$
脚本运行的当前进程ID号
$!
后台运行的最后一个进程的ID号
$?
显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

在这里插入图片描述

交互模式

read WESTOS	对WESTOS赋值
read -p "XXXX"	输出提示语
-s	隐藏输出内容

在这里插入图片描述



9. 脚本函数


定义:程序的别名


设定方式:

函数名()
{
    
    
	action1;
	action2;
}

函数调用: 函数名

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数… ${10}表示第10个参数


测试:

create_user.sh 判断用户是否存在

  1. 存在则输出存在
  2. 不存在则自动创建,并设立密码,最后显示该用户已创建
  3. 当输入exit时退出程序

#!/bin/bash
Main()
{
    
    
	read -p "Please input username: " userName
	[ -z "$userName" ] && {
    
    
		Main
		}
	[ "$userName" = "exit" ] || [ "$userName" = "EXIT" ] && {
    
    
		echo "bye !"
		exit
		} || {
    
    
			User_Create $userName
			}
}

User_Create()
{
    
    
	userName=$1	
	id $userName &> /dev/null && {
    
    
		echo "$userName is exist !"
		Main
		} || {
    
    
			read -p "Please input $userName password: " -s Passwd
			echo ""
			useradd $userName
			echo $Passwd | passwd --stdin $userName &> /dev/null
			echo $userName is created successfully !
			Main
			}
}

Main

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46069582/article/details/111566786