shell中的变量,函数

变量:

变量即是用固定的字符串表示变化的值

变量的定义:

shell中的变量种类:
环境级变量,用户级变量,系统级变量

环境级变量:

(export) a=1 
(声明) a=1

若不加export直接a=1,则该变量定义只会在当前shell进程环境中生效
(su,或bash开启另一个bash进程后,变量a定义就失效了)
但是export a=1,只要在当前进程中(或其子进程),即便是切换到其他用户(su student),变量也是仍然生效的。不过su - student加载用户环境后,a就失效了

用户级变量:
用户级变量写在用户的骨文件中,只针对当前用户生效
vim ~/.bash_profile

系统级变量:
系统级变量写在系统的配置文件 /etc/profile 或者 /etc/profile.d/ 中,对于所有用户都生效
vim /etc/profile

上面的两个用户级,系统级变量,在配置文件中定义了之后,必须要再重新加载执行才可以生效:
source ~/.bash_profile
source /etc/profile

env命令可以查看到系统中大多数的变量

我们之所以能直接使用命令,就是因为其脚本文件在/bin/等目录下,系统会根据环境变量PATH的值去找相应的脚本文件并执行

下图为例:
图一中,定义环境级变量
图二,三中,定义用户级变量
(使用bash命令在当前窗口进程下开启一bash子进程)
图四,五中,定义系统级变量
(定义时,忘了加上声明关键词export,变量作用范围一下子减小了很多)
图六,七中,重新定义系统级变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

变量命名规范:

不能以数字,符号开头
可以用字母,下划线开头,一般使用大写字母

\ 该符号用于字符的转义
" " 弱引用 (将引号内部的内容批量转义)
' ' 强引用

我理解的“转义“,即是将具有特殊意义的字符,以本身字符的形式使用(引用)

" "比' '能转义的字符数量少
" "不能转义\ ` ! $ 这四个符号,但是' '可以

下图为例:
图二中,可以看出,变量的值是作为字符串带入的。
${ }用于变量的声明,与上面的变量定义的export不同。这只是用于声明a是一个变量,而不是ab整体是一个变量
在这里插入图片描述
在这里插入图片描述
应用示例:

读取文件创建用户,更改密码:

#!/bin/bash
export a=`wc -w /mnt/userfile | awk '{print $1}'`
for NAME in `seq 1 $a`
do
	b=`sed ${NAME}p -n /mnt/userfile`
	c=`sed ${NAME}p -n /mnt/passfile`
	useradd $b;
	echo $c | passwd --stdin $b
done

变量值传递:

将变量值从脚本外部传递到内部

$1 脚本后面的第一串字符
$2 脚本后面的第二串字符
$3 脚本后面的第三串字符
$* 将脚本后面的所有字符识别为一组(一串)字符串
$@ 将脚本后面的所有字符识别为多组字符串(以空格为分隔符)
$# 脚本后面的字符串总数
$0 脚本名称

交互式定义变量: read
read -p 显示输入提示语(print打印)
read -s 输入不回显(隐藏)

下图为例:
图三中,在read语句中,使用WORD1,2变量保存变量的值
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
应用示例:

交互式控制用户管理

#!/bin/bash

[ $1 = '-d' ] && {
	read -p "please input username:" -s NAME &&{
		userdel -r $NAME
		echo $NAME will delete 
	}
}
[ $1 = '-c' ] && {
        read -p "please input username:" -s NAME &&{
                read -p "please input password:" -s PASSWORD && {
			useradd $NAME
        	        echo $PASSWORD | passwd --stdin $NAME
		}
        }
}

命令别名的设定:

alias 查看命令别名

别名其实就是变量,只不过其变量的值是命令
任何命令都可以有别名

alias xie=‘vim’
设定命令别名xie,执行该别名,实际执行vim命令
(但是注意,这是环境级的变量)

用户级设定:
vim ~/.bashrc

(所有用户)系统级设定:
vim /etc/bashrc

更改配置文件后,使用source filename重新加载文件,使得增加的配置生效。
但是注意的是,上面的命令不是刷新配置,只是再次加载。

下图为例:
图一中,定义环境级命令别名
图二,三中,分别定义用户级命令别名和系统级命令别名
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
删除命令别名:

先删除上面两个配置文件中的设定。
注意:
这里不用source,不存在的设定自然就无法生效了
(但是当前环境下还有之前加载过的缓存)
只要关闭当前环境(shell),打开新的环境(shell),就会发现之前设定的命令别名无法使用了
或者不开启新的环境,只要执行下面的命令也可以:
unalias xie
设定的别名
在这里插入图片描述

命令退出值

默认情况下,一个命令如果在退出值为非零时,该命令的执行是不正常的(有报错的)
使用命令查看:echo $? 可以查看到上一条执行完毕的命令的退出值

但是我们可以使用exit num,认为设定脚本退出时的返回值为num
在这里插入图片描述

自定义函数

变量是一串字符等于一个值
函数是一串字符等于一个动作
(函数即代码块内部执行的动作)

函数应用:
缩减脚本的长度(将重复多次的动作封装定义为一个函数)
实现循环(自己调用自己)

#!/bin/bash
READ()
{
        read -p "Please input word: " WORD
        [ "$WORD" = "exit" ] && {
                echo bye
                exit 0
        }
        echo  $WORD
        READ
}	#上面这些{ }内部的代码块,是对于READ这个函数执行动作的定义
READ    #这句才是实际调用READ函数

下图为例:
在这里插入图片描述

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值