Shell脚本中的变量

一、变量的定义

1、定义

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

2、变量存在的意义

命令无法操作一直变化的目标,用一串固定的字符来表示不固定的目标可以解决此问题。

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

1、环境级别

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

没有引进环境变量时:

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

引进环境变量:

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

2、用户级别

vim ~/.bash_profile
export a=2

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

可以在 ~/.bash_profile 中指定在执行脚本时某个目录中的脚本可以使用相对路径方式调用脚本

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

3、系统级别

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

用户级变量的设定在切换用户时会失效;因为切换用户之后,当前用户打开shell时读取变量的文件是自己家目录下的 .bash_profile

在这里插入图片描述

在系统级的配置文件 /etc/profile 中进行系统级变量定义

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

切换至普通用户也能够读取变量

在这里插入图片描述

4、变量名称

(1)、 变量名称可包含的字符

字母,下划线_,数字

(2)、变量名称定义规则

不能用数字开头
建议:
变量名称短全用大写字符
变量名称长用_区分子类

例如:
WESTOS
Westos_Linux
westoS_Linux

三、变量的转译

1、转译

符号意义
\转译单个字符
“”弱引用,批量转译个数字符 不能转译"\ " “” “$” “!”
‘’强引用

在这里插入图片描述

2、声明

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

在这里插入图片描述

3、变量的数组

命令意义
a=(1 2 3 4 5)创建一个数组
echo ${a[0]}数组中第一个元素
echo${a[1]}数组中第二个元素
echo$[a[@:起始元素id:元素个数]从指定元素到指定元素的元素输出
echo${a[@]:0:3}数组中1-3个元素
echo a [ ∗ ] e c h o {a[*]}echo a[]echo{a[@]}数组中元素的个数
unset a[n]删除数组中的第n个元素
unset a删除a这个数组

在这里插入图片描述
注意*和@的区别

 ${a[*]}="1 2 3 4 5"  
 ${a[@]}="1" "2" "3" "4" "5"

四、linux命令中的别名设定

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

在这里插入图片描述

在这里插入图片描述

使用文件方式添加,对系统所用用户生效。当删除环境中的alias时,不能再被识别。

在这里插入图片描述

切换至普通用户,发现不能被识别

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

五、用户环境变量的更改

设定方式:

~/.bash_profile
export PATH=PATH:/mnt
/etc/bash_profile
export PATH=$PATH:/mnt

1、直接利用命令执行结果

优先执行

TEST=hostname TEST=$(hostname)
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

2、脚本中的传参

非交互模式:

参数意义
$0脚本本身
$1脚本后输入的第一串字符
$2脚本后输入的第二串字符
$*脚本后输入的所有字符(“1 2 3”)
$@脚本后输入的所有字符(“1” “2” “3”)
$#脚本后输入字符串的个数

在这里插入图片描述

交互模式传参:

read  -p  "Please input word:  "  (-s)  WORD               
##-p==显示提示语句;-s==隐藏录入内容;WORD==变量
echo  $WORD
##显示变量的值

在这里插入图片描述

六、脚本函数

1、定义

程序的别名

2、设定方式

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
此脚本退出

Create_user()#函数定义
{
read -p "Please input username:" USERNAME #将输入的文字作为变量USERNAME的直
[ "$USERNAME" = "EXIT" -o "$USERNAME" = "exit" ] &> /dev/null &&{
  echo bye~ #当USERNAME为EXIT或者exit时退出脚本
  exit
}
id $USERNAME  &> /dev/null &&{
  echo $USERNAME is exist	#如果该用户存在则显示存在语句
  Create_user
}||{
  useradd $USERNAME	#如果不存在则创建用户
  read -p "please input password:" -s PASS #表示输入的密码不显示
  echo "" #换行
  echo $PASS | passwd --stdin $USERNAME && echo $USERNAME is created	#将输入的密码保存并显示用户创建成功
  Create_user
}
}
Create_user

实现:
在这里插入图片描述

2、显示系统中UID最大且能登陆系统的用户名

grep sh /etc/passwd | sort -rn -t : -k 3|head -n1| cut -d : -f 1在这里插入图片描述

3、编写脚本file_check.sh

脚本后未指定检测文件——>“未指定检测文件,请指定”;脚本后指定文件不存在时——>“此文件不存在”;脚本后指定文件存在时请检测文件类型并显示到输出

#!/bin/bash
[ -z "$1" ] &>/dev/null &&{
  echo "ERROR:Please input filename"
  exit
}
[ -e "$1" ] &>/dev/null ||{
  echo "$1 dose not exist!"
  exit
}
[ -d "$1" ] &>/dev/null &&{
  echo "$1 is a directory!"
  exit
}
[ -S "$1" ] &>/dev/null &&{
  echo "$1 is a socket"
  exit
}
[ -L "$1" ] &>/dev/null &&{
  echo "$1 is a link fike"
  exit
}
[ -b "$1" ] &>/dev/null &&{
  echo "$1 is a block device!"
  exit
}
[ -c "$1" ] &>/dev/null &&{
  echo "$1 zifushebei!"
  exit
}

在这里插入图片描述

4、显示系统中能使用su命令切换的用户

awk '/bash$|sh$/{print $1}' /etc/passwd|cut -d : -f 1

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值