shell脚本中的变量


一、变量的定义及存在的意义

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

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

注意:不同进程之间是不能共享资源的,一个进程中的线程可以使用该进程的资源

1.环境级别

export a=1 %将a=1这个变量设定作为资源共享出来,以至于其它进程也可以使用
在环境关闭后变量失效

2.用户级别

vim ~/.bash_profile
export a=1
%举例如下
[root@test3 mnt]# vim ~/.bash_profile    %编辑完需要source执行,否则不会生效
[root@test3 mnt]# sh westos.sh 
                                         %所设定的变量无法显示
[root@test3 mnt]# source ~/.bash_profile  
[root@test3 mnt]# sh westos.sh 
1

3.系统级别

vim /etc/profile                  %该文件原本存在,在里面添加所需要的设定
export a=2

vim /etc/profile.d/westos.sh      %该文件原本不存在,是后来添加的
export b=3

%可以用env指令查看所有的环境变量
%shell提示符:例如[root@test3 mnt]# 也是一个环境变量,可以用echo $PS1查看
[root@test3 mnt]# echo $PS1
[\u@\h \W]\$
%可以用PS1="xxx"设定shell提示符的环境变量,可以exit退出再进入shell即可恢复原来的shell提示符
%通过echo $PATH查看命令执行环境变量,如下所示:
[root@test3 mnt]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin %这串字符串表示你当前的用户能在系统里面直接执行的命令所存储的路径
%更改该路径并测试
[root@test3 mnt]# chmod +x westos.sh 
[root@test3 mnt]# vim ~/.bash_profile 
[root@test3 mnt]# source ~/.bash_profile 
[root@test3 mnt]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/root/bin:/root/bin:/mnt
[root@test3 mnt]# cd
[root@test3 ~]# westos.sh %不需要写脚本的绝对路径就可以正确执行脚本
1

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

三、变量的数组

a=(1 2 3 4 5)    
echo ${a[0]}         %数组中第一个元素
echo ${a[-1]}        %数组中最后一个元素
echo ${a[*]}         %数组中所有元素 所有元素整体当作一个字符串
echo ${a[@]}         %数组中所有元素 数组中的每个元素都当作一个单独的字符串
echo ${a[@]:0:3}     %数组中1-3个元素
echo ${#a[@]}        %数组中元素的个数

%抓取IP实验
[root@test3 ~]# ifconfig enp1s0
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.4.17.100  netmask 255.255.255.0  broadcast 10.4.17.255
        inet6 fe80::5054:ff:fe52:ab34  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:52:ab:34  txqueuelen 1000  (Ethernet)
        RX packets 28  bytes 14990 (14.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 110  bytes 10902 (10.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@test3 ~]# IP=(`ifconfig enp1s0 | grep -E "inet\>"`)
[root@test3 ~]# echo $IP
inet
[root@test3 ~]# echo ${IP[1]}
10.4.17.100

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

四、脚本函数及相关脚本练习

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

(2)脚本练习
编写脚本:create_user.sh
sh create_user.sh
"Please input username:westos"
westos exist ------<output>----->westos is exist----->please input username:
westos not exist -----please input password:无回显密码
此用户会自动建立并且密码为提示后设定的密码
并显示:westos is created
并再次提示please input username:
当please input username:exit
此脚本退出

(3)脚本书写思路
   1、判定exit退出
  [ "$USERNAME" = "exit" -o "$USERNAME" = "EXIT" ] && {
          echo bye
          exit
    }||{
          进入判定用户是否存在
    }

   2、判定用户是否存在
 用户存在显示返回判定exit
 id 用户名称变量 &> /dev/null && {
    echo 用户存在
    判定exit
 }
 用户不存在建立用户返回判定exit
 ||{
 显示 please input password:
 建立用户
 更改密码
 显示用户建立成功
 判定exit
 }4)脚本内容
 #!/bin/env bash
 EXIT()
 {
    read -p "please input username: " USERNAME
    [ "$USERNAME" = "exit" -o "$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 PASSWD
            echo ""
            useradd $1
            echo $PASSWD | passwd --stdin $1 &> /dev/null && echo $1 is created
            EXIT
     }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值