Linux---shell变量及脚本中的函数

一、什么是变量?

shell在定义变量的时候,变量名与变量之间不能存在空格,这个大多数的语言的这个不同还是蛮大的,不过定义的规则就其他的语言定义的规则大致相同了。
1) 局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

二、变量的分类

1、环境级变量

[root@localhost ~]# export a=1   ##export声明,相当于把变量放到公共部分,让子进程可以读到
[root@localhost ~]# echo $a
[root@localhost ~]# bash
[root@localhost ~]# ps f
[root@localhost ~]# echo $a

这里写图片描述

2、用户级变量

[root@localhost ~]# vim .bash_profile
在最后一行加入:export a=1
[root@localhost ~]# source .bash_profile  ##刷新用户变量
[root@localhost ~]# echo $a
[root@localhost ~]# exit  ##退出
[kiosk@foundation28 Desktop]$ ssh root@172.25.254.128
[root@localhost ~]# echo $a  ##再次查看a=1依然生效

这里写图片描述
这里写图片描述

3、系统级变量

[root@localhost ~]# vim /etc/profile
在最后一行加入:export a=2
[root@localhost ~]# source /etc/profile ##刷新系统级变量
[root@localhost ~]# echo $a  
[root@localhost ~]# exit
[kiosk@foundation28 Desktop]$ ssh root@172.25.254.128
[root@localhost ~]# echo $a

这里写图片描述
这里写图片描述

[root@localhost mnt]# install_apache.sh
[root@localhost mnt]# echo $PATH
[root@localhost mnt]# chmod +x /mnt/*
[root@localhost mnt]# PATH=$PATH:/mnt
[root@localhost mnt]# echo $PATH

这里写图片描述

[root@localhost mnt]# install_apache.sh 8989
[root@localhost mnt]# exit
[kiosk@foundation28 Desktop]$ ssh root@172.25.254.128
[root@localhost ~]# install_apache.sh 8989

这里写图片描述

[root@localhost ~]# vim /etc/profile    ##写入系统变量文件
在最后一行加入:export PATH=$PATH:/mnt
[root@localhost ~]# source /etc/profile   ##刷新
[root@localhost ~]# exit
[kiosk@foundation28 Desktop]$ ssh root@172.25.254.128
[root@localhost ~]# install_apache.sh 8989

这里写图片描述
这里写图片描述

三、字符转译及变量声明

1、“\“ 转译单个字符

[root@localhost ~]# a=\$1
[root@localhost ~]# echo $a

这里写图片描述

2、” ” 弱引用,批量转译”“中出现的字符

[root@localhost ~]# echo "####`hostname`####"

这里写图片描述

3、’ ’ 强引用,批量转译”中出现的字符

[root@localhost ~]# echo '####`hostname`####'

这里写图片描述

4、’ ’ 与 ” ” 区别在于 ” “不能转译”\”,”`”,”!”,”$”

[root@localhost ~]# a="$1"
[root@localhost ~]# echo $a

[root@localhost ~]# a='$1'
[root@localhost ~]# echo $a

这里写图片描述

5、${ } 变量声明

[root@localhost ~]# a=1
[root@localhost ~]# echo $ab

[root@localhost ~]# echo ${a}b

这里写图片描述

6、$[ ] 作运算

$( )相当于` `
[root@localhost ~]# echo $[1+1]

这里写图片描述

四、变量值传递

$1 脚本后的第一串字符串
$2 脚本后的第二串字符串
$3 脚本后的第三串字符串
$# 脚本后所跟字符串的个数
$* 脚本后根的所有字符串,模式为“1 2 3$@ 脚本后根的所有字符串,模式为"1" "2" "3"

命令内容:

[root@localhost mnt]# echo $$  ##显示当前所在的进程
[root@localhost mnt]# vim test.sh
[root@localhost mnt]# sh test.sh 

这里写图片描述

[root@localhost mnt]# sh test.sh  westos
[root@localhost mnt]# sh test.sh  westos linux
[root@localhost mnt]# sh test.sh  westos linux redhat

这里写图片描述


区别:

$*$@区别: $*后面是一串字符,$@后面是三串字符

证明:

[root@localhost ~]# cd /mnt
[root@localhost mnt]# vim for.sh
[root@localhost mnt]# sh -x for.sh westos linux redhat 
##执行脚本,并查看过程

这里写图片描述
这里写图片描述

[root@localhost mnt]# vim for.sh
[root@localhost mnt]# sh -x for.sh westos linux redhat

这里写图片描述
这里写图片描述

编写脚本:当输入的文件少于两个时提示错误,用脚本建立文件中用户及密码

[root@localhost mnt]# vim create_user.sh

这里写图片描述

[root@localhost mnt]# sh create_user.sh 
[root@localhost mnt]# cat userfile
[root@localhost mnt]# cat passfile
[root@localhost mnt]# sh create_user.sh userfile passfile

这里写图片描述
这里写图片描述
这里写图片描述


五、用read实现变量传递

read  WESTOS
read -s WESTOS    ##-s表示加密
read -p “input:” WESTOS  ##-p表示提示 

测试IP的交互式传参:

[root@localhost mnt]# vim text.sh 
[root@localhost mnt]# sh text.sh

这里写图片描述
这里写图片描述

在登录用户和密码时使用交互式传参:

[root@localhost mnt]# vim create_user.sh   ##编写脚本
[root@localhost mnt]# chmod +x create_user.sh  ##给脚本可执行权限
[root@localhost mnt]# ./create_user.sh  ##执行脚本

这里写图片描述
这里写图片描述


六、linux系统中命令别名的设定

临时更改:

[root@localhost ~]# alias xie='vim'   ##将vim定义为xie
[root@localhost ~]# xie

这里写图片描述

[root@localhost ~]# alias

这里写图片描述
在用户和系统里写入:永久更改

[root@localhost ~]# vim .bashrc
alias xie='vim'
[root@localhost ~]# source .bashrc
[root@localhost ~]# su - student
[student@localhost ~]$ xie
[student@localhost ~]$ exit

这里写图片描述
这里写图片描述

[root@localhost ~]# vim /etc/bashrc
alias xie='vim'
[root@localhost ~]# source /etc/bashrc  ##刷新系统变量
[root@localhost ~]# su - student
[student@localhost ~]$ xie
[student@localhost ~]$ exit

这里写图片描述
这里写图片描述
这里写图片描述
删除:

[root@localhost ~]# vim /etc/bashrc   ##删除alias xie='vim'
[root@localhost ~]# vim .bashrc ##删除alias xie='vim'
[root@localhost ~]# source /etc/bashrc
[root@localhost ~]# alias  

这里写图片描述

[root@localhost ~]# unalias xie  ##删除alias
[root@localhost ~]# alias 

这里写图片描述


七、利用命令执行结果设定变量

Hostname=$(hostname)
Hostname=`hostname`
$?是命令在执行完成之后产生的退出值
范围是[0~255]
当$0=0时标示命令执行没![这里写图片描述](https://img-blog.csdn.net/20180621234422291?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FyZ3VlZF9E/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)有错误输出
这个值可以用exit命令执行

脚本编写:显示IP的状态用退出值执行退出

[root@localhost mnt]# vim ip_check.sh

这里写图片描述

[root@localhost mnt]# sh ip_check.sh

这里写图片描述


八、脚本中的函数

编写脚本:利用函数循环检测文件类型

[root@localhost mnt]# vim file_check.sh

这里写图片描述

[root@localhost mnt]# sh file_check.sh /etc/system-release
[root@localhost mnt]# sh file_check.sh /etc/passwd

这里写图片描述

利用脚本根据函数建立用户删除用户,并设置密码

[root@localhost mnt]# vim user_ctl.sh

这里写图片描述

[root@localhost mnt]# sh user_ctl.sh   ##调用脚本

这里写图片描述

猜你喜欢

转载自blog.csdn.net/argued_d/article/details/80767513