Linux中shell脚本中的变量

目录

一、变量的定义

二、shell脚本中变量的定义方法

1、变量名称

2、环境级别 

3、用户级别

4、系统级别

5、删除设定的变量

三、变量的转译

1、转译

2、声明

3、变量的数组

四、Linux中命令的别名设定 

五、用户环境变量的更改

脚本中的传参

1、非交互模式

2、交互模式

六、脚本函数

练习脚本


一、变量的定义

  • 变量就是内存一片区域的地址(用一个字符串表示内存地址的方式)
  • 变量存在的意义:命令无法操作一直变化的目标,用一串固定的字符来表示不固定的目标可以解决此问题

二、shell脚本中变量的定义方法

1、变量名称

  • 变量名称可包含的字符:字母,下划线_,数字
  • 变量名称定义规则:不能用数字开头
  • 建议:变量名称短全用大写字符,变量名称长用_区分子类

sh无法运行脚本,用.可以运行脚本
因为sh的运行方式会在当前shell中重新开启一个子shell,因此变量的值没有传递到子shell中,所以无法得到运行结果,须将变量放到公共区域中去。

2、环境级别 

export a=1 在环境关闭后变量失效

        当环境关闭后,shell在内存中的所有数据被系统回收,打开新的shell,是一个新的内存地址,无法寻址得到a的值 

3、用户级别

环境关闭后,仍有效,切换用户后失效

vim ~/.bash_profile
export a=1

4、系统级别

不受环境和用户的影响

vim /etc/profile
export a=2
vim /etc/profile.d/westos.sh
export b=3

5、删除设定的变量

依次删除设定的系统变量,用户变量,环境变量

rm -fr /etc/profile.d/skk.sh
vim ~/.bash_profile
unset a

三、变量的转译

1、转译

\ 转译单个字符
“” 弱引用,批量转译字符,不能转译"\" " " "$" "!"
'' 强引用
$$ 当前进程的id

Linux中shell脚本中的变量_第1张图片 Linux中shell脚本中的变量_第2张图片

2、声明

对a做变量声明

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

 Linux中shell脚本中的变量_第3张图片

 3、变量的数组

a=(1 2 3 4 5 6)
a$[a[@]:起始元素id:元素个数]

echo ${a[0]}         ##数组中第一个元素
echo ${a[3]}	     ##数组中第4个元素
echo ${a[-1]}        ##数组中最后一个元素
echo ${a[*]}         ##数组中所有元素
echo ${a[@]}         ##数组中所有元素
echo ${a[@]:0:3}     ##数组中第1到3个元素
echo ${a[@]:3:3}	 ##第三个元素后的三个元素
echo ${#a[@]}        ##数组中元素的个数

unset a[n]           ##删除数组中的第n+1个元素
unset a              ##删除a这个数组

Linux中shell脚本中的变量_第4张图片

四、Linux中命令的别名设定 

alias xie='vim'  ##临时设定
vim ~/.bashrc
alias xie='vim'  ##只针对当前用户生效
vim /etc/bashrc
alias xie='vim'  ##针对系统所有用户生效
vim /etc/skel/.bashrc
alias xie='vim'  ##针对新建的用户生效
alias  ##查看
unalias xie  ##删除当前环境中的alias

五、用户环境变量的更改

设定的方式:

export PATH=$PATH:/mnt  ##环境级别
vim ~/.bash_profile  ##用户级别
vim /etc/bash_profile  ##系统级别

/mnt下的脚本有执行权限后,可以不用加绝对路径执行

脚本中的传参

1、非交互模式
$0 shell脚本的文件名
$1 脚本后所输入的第一串字符
$2 脚本后所输入的第二串字符
$* 脚本后所输入的所有字符"1 2 3"
$@ 脚本后所输入的所有字符"1" "2" "3"
$# 脚本后所输入的字符串个数
vim test.sh

echo '$0' is $0
echo '$1' is $1
echo '$2' is $2
echo '$*' is $*
echo '$@' is $@
echo '$#' is $#

Linux中shell脚本中的变量_第5张图片

2、交互模式

read:赋值,-p:输出提示语
-s:隐藏输入内容,echo "":换行

vim test2.sh

read -p "Please input name:" -s NAME
echo ""
echo $NAME

六、脚本函数

定义:程序的别名
设定方式:WORD在脚本中就代表action1 、action2这两个动作

WORD()
{
	action1
	action2
}

练习脚本

1

sh create_user.sh Please input username: westos

westos exist> westos is exist>Please input username:

westos not existplease input password: 无回显密码

此用户会自动建立并且密码为提示后设定的密码

并显示:westos is created 并再次提示Please input username:

当Please input username:exit 此脚本退出

EXIT()
{
        read -p "Please input username: "  username
        [ "$username" = "exit" ]||[ "$username" = "EXIT" ] &&{
        echo "bye"
        exit
        }||{
                USER_ACTION $username
        }
}

USER_ACTION()
{
        id $1 &> /dev/null && {
        echo "$1 is exist"
        EXIT
        }|| {
                read -p "Please input password: " -s password
                echo ""
                useradd $1
        echo $password | passwd --stdin $1 &> /dev/null && echo $1 is created
        EXIT
        }
}
EXIT

 Linux中shell脚本中的变量_第6张图片

2

echo "[a]add [d]delete"
read -p "Please input action: " ACTION

[ "$ACTION" != "a" -a  "$ACTION" != "d" ] && {
        echo Wrong action !!
        exit
        }

[ "$ACTION" = a ] &&{
  read -p "Please input username: " USERNAME
  id $USERNAME &> /dev/null && {
        echo $USERNAME is exist !!
        }||{
        read -p "Please input password: " PASSWORD
        useradd  $USERNAME
        echo $PASSWORD | passwd --stdin $USERNAME &> /dev/null &&{
                echo $USERNAME is created !!
        }
        exit
        }
}


[ "$ACTION" = d ] &&{
  read -p "Please input username: " USERNAME
  id $USERNAME &> /dev/null && {
        userdel -r $USERNAME
        echo $USERNAME is delete !!
        }||{
        echo $USERNAME is not exist !!
        }
        exit
}

Linux中shell脚本中的变量_第7张图片

你可能感兴趣的:(shell,linux,运维,服务器)