shell脚本中的变量

一、shell中变量的类型

1.环境级变量

临时赋值:
echo $a ## 显示变量a的值
a=5 ##赋值效果只在当前shell中有效
export a=1 ##声明变量,这样使当前shell中变量在当前用户的所有子shell中都有效
当前shell关闭后,重新打开后赋值又无效。
关闭shell后,系统会回收资源,重新打开shell后,资源重置,所以赋值失效。

2.用户级变量

vim ~/.bash_profile:
#.bash_profile
#Get the aliases and fuctions
if [ -f ~/.bashrc ]; then
	. ~/.bashrc
fi
#User specific environment and startup programs
PATH=$PATH:$HOME/bin

export PATH
export a=1

source ~/.bash_profile ##生效当前的更改信息

su -westos ##用户及环境变量只针对于被设定过的用户生效,切换用户后,变量会失效,因为切换用户后开启的shell读取的是自己在目录的.bash_profile

3.系统级环境变量配置主文件

vim /etc/profile ##系统级环境变量配置主文件,一般是不会对其进行修改。
系统级环境变量配置自定义子文件

vim /etc/profile.d/westos.sh:
[root@westosa westos]# cat /etc/profile.d/westos.sh
################################################
#Author:                 lee#
#Version:                1.0#
#Create_Time:            2021/08/14
#Mail:                   lee@westos.org
#Info:           
#
#
################################################

#!/bin/bash
export a=1
source /etc/profile.d/westos.sh ##重新读取配置文件内容,让修改生效

这样设置的变量系统中的所有用户都可以使用该变量的

设置在执行命令时/mnt中的脚本可以调用的相对路径:

 .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
  . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/mnt

export PATH
export a=1

检测:
echo $PATH :
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/mnt

二、变量的命称

变量的名称只可以包含:字母、数字、符号
且不可以用数字开头。
示例:
[root@westosa mnt]# a@=1
bash: a@=1: command not found…
[root@westosa mnt]# 1a=1
bash: 1a=1: command not found…

\ ##转译单个字符
批量转译:
‘’ ##强引用,可以引用所有
“” ##弱引用,不可以引用\ $ ! 示例; [root@westosa mnt]# echo '$5' $5 [root@westosa mnt]# echo "$5" ##

三、变量的声明

[root@westosa mnt]# echo KaTeX parse error: Expected 'EOF', got '#' at position 5: ab #̲#当显示ab时,本想 a 的 值 显 示 出 来 , 但 系 统 识 别 a的值显示出来,但系统识别 aab是一个变量的名称。

[root@westosa mnt]# echo ${a}b ##此时需要对a进行声明,{a}对a进行声明
6b

四、变量的数组

[root@westosa mnt]# a=(1 2 3 4 5) ##定义一个数组a
[root@westosa mnt]# echo ${a[0]} ##显示数组的第一个元素
1
[root@westosa mnt]# echo ${a[1]} ##显示数组的第二个元素
2
[root@westosa mnt]# echo ${a[]} ##显示数组的所有元素
1 2 3 4 5
[root@westosa mnt]# echo ${a[@]} ##显示数组的所有元素
1 2 3 4 5
${a[@]}= “1” “2” “3” “4” “5” ## @ 将元素单个列出
${a[
]}=“1 2 3 4 5” ## * 将所有元素作为一个整体列出

[root@westosa mnt]# echo ${a[-1]} ##显示数组倒数第一个元素
5
[root@westosa mnt]# echo ${a[-2]} ##显示数组倒数第二个元素
4
[root@westosa mnt]# echo ${a[@]:0:3} ##显示数组从第一个元素开始向后的三个元素
1 2 3
[root@westosa mnt]# echo ${a[@]:2:3} ##显示数组从第三个元素开始向后的三个元素
3 4 5
[root@westosa mnt]# unset a[0] ##删除数组的第一个元素 :[root@westosa mnt]# echo ${a[@]} 2 3 4 5
unset a ##删除数组a

五、变量定义方式

1.命令的输出指定变量:
[root@westosa mnt]# vim ~/.bashrc
非交互式

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias xie='vim'
# Source global definitions
if [ -f /etc/bashrc ]; then
	. /etc/bashrc
fi

2.脚本的传参:
vim test.sh:

echo '$0' is $0  ##脚本本身
echo '$1' is $1  ##脚本后边输入的第一个字符
echo '$2' is $2  ##脚本后边输入的第一个字符
echo '$3' is $3  ##脚本后边输入的第一个字符
echo '$*' is $*  ##脚本后面跟得所有字符
echo '$@' is $@  ##脚本后面跟得所有字符
echo '$#' is $#  ##脚本后面所输入的字符个数

3.交互式
vim westos.sh:

#!/bin/bash
read -p "Please input word:" -s  WORD  ##-s隐藏录入的值 ,-p 显示提示语句
echo $WORD

六、脚本中的函数

脚本中的函数可以理解为脚本中的脚本。
ECHO()
{

动作

}

脚本中的函数可以让脚本循环起来
ECHO()
{

动作

ECHO
}
ECHO

函数的脚本,实战演练

检查目标是否存在,并判断其类型:

#!/bin/bash
File_Type()
{
  [ $1 "$FILENAME" ] && {
  echo $FILENAME is "$2"
  echo ""
  Check_File
  }
}

Check_File()
{ 
  read -p " Please input filename: " FILENAME
  [ "$FILENAME" = "exit" ] && {
  echo bye
  exit
  }
  File_Type " ! -e " "not found"
  File_Type -L "link file"
  File_Type -f "common file"
  File_Type -d "directory"
  File_Type -b "block file"
  File_Type -S "socket"
  File_Type -c "char file"
  Check_File
}
Check_File

检测一个用户是否存在,存在的话,退出脚本。不存在先建立用户,设定用户密码,再退出。

#!/bin/bash
CREATE()
{
    read -p "Please input username:" NAME
    [ "$NAME" = "exit" ] && {
    exit
    }   

    id $NAME &> /dev/null && {
    echo "$NAME is exits"
    CREATE
    } || {
    read -p "Please input password:" -s PASSWD
    useradd $NAME
    echo $PASSWD | passwd --stdin $NAME
    echo "$NAME is created"
    CREATE

    }   
}
CREATE
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值