shell中的变量
一、变量的定义:变量即在程序运行过程中它的值时允许改变的量;
变量是用一串固定的字符来表示不固定的值的一种方法;
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script运行时可更改的程序信息;
在shell中变量是不能永久保存在系统中的,必须在文件中声明。
二、在shell脚本中变量的种类
在shell中变量分为环境级变量、用户级变量、系统级变量;
环境级变量只在当前shell中生效,shell关闭变量消失;
用户级变量写在用户的主文件中,只针对当前用户失效;
系统级变量被写在系统的配置文件/etc/profile或/etc/profile.d/中,对所有用户都生效。
三、shell脚本中变量的定义方法
1、环境级变量,只在当前shell中生效,export WESTOS=1
2、用户级变量,只针对当前用户生效。
vim ~/.bash_profile在文件里写入export WESTOS=1;
source重新载入文件(只能载入增加)
3、系统级变量,对所有用户都生效;
vim /etc/profile在配置文件里同样写入export WESTOS=1
4、如何实现让本来在/mnt下的脚本在任何环境下都可以直接执行
像上面ls在任何路径下都可以执行,这是因为ls的执行路径写在了配置文件里,$PATH可以查看;
下面我们将/mnt也加入主文件里,此时在当前用户,何种环境都可以执行/mnt下都脚本,不用写绝对路径
四、字符的转译
1、\转移一个字符
[root@localhost ~]# echo \$5
[root@localhost ~]# echo \#5
2、" "弱引用,批量转译“ ”中出现的字符;
\ ` 可以转译,跟东西就不转译) ! 不能转译
3、${}变量声明
4、‘ ’强引用
5、``优先执行里面的内容,``与$()一样,但是区别是``不能连用
五、变量值传递
$1
脚本后的第一串字符
$2
脚本后的第二串字符
$3
脚本后的第三串字符
$#
脚本后所跟字符的个数
$*
脚本后的所有字符串(一个个体)
$@
脚本后的所有字符串(一个整体)
$*
脚本后的所有字符串(一个个体)
$@
脚本后的所有字符串(一个整体)
<一、测试:(非交互式传参)建立用户名和设置密码>
##将脚本内do的第三行改为: userdel -r $USERNAME 意思是删除
六、用read实现变量传递
-p表示显示
-s表示加密
[root@localhost mnt]# vim test.sh
[root@localhost mnt]# cat test.sh
#!/bin/bash
read -p "Please input a number: " WESTOS
echo $WESTOS
[root@localhost mnt]# sh test.sh
Please input a number: 123
123
[root@localhost mnt]# vim test.sh
[root@localhost mnt]# cat test.sh
#!/bin/bash
read -p "Please input a number: " -s IP
echo " "
ping -c1 -w1 $IP &> /dev/null && echo $IP is up || echo $IP is down
[root@localhost mnt]# sh test.sh
Please input a number:
172.25.254.129 is up
<二、测试:(交互式传参)输入命令建立用户和密码>
##将脚本内do的第三行改为: userdel -r $USERNAME 意思是删除
七、Linux系统中命令别名的设定
1、alias 查看命令的别名
测试:
下面我们将vim命令赋予别名xie;即输入xie即可进入vim编辑
1)临时设定 编辑 ~/.bashrc
2)永久设定,在/etc/bashrc里同样编辑如下
[root@localhost ~]# vim /etc/bashrc
[root@localhost ~]# source /etc/bashrc ##source载入可以alias查看
[root@localhost ~]# su - student
Last login: Thu Jun 21 08:53:38 EDT 2018 on pts/1
[student@localhost ~]$ xie
[student@localhost ~]$ alias
3)删除unalias命令
八、利用执行结果设定变量
$?表示命令执行完后的退出值,范围是[0~255];0表示没有错误的输出;
<三、测试:用命名表示IP是否存在>
九、脚本中的函数
脚本中函数是把一个负载的语句块定义成一串字符的方法
[root@localhost ~]# vim file.sh
[root@localhost ~]# sh file.sh
Please input a ipaddress: 172.25.254.111
172.25.254.111 is down
Please input a ipaddress: 172.25.254.129
172.25.254.129 is up
Please input a ipaddress: exit
^C ##如果不按Ctrl+c不会结束,所以请看以下:
[root@localhost ~]#
##加入exit的&&正确的输出【||错误的输出,&与,|或】
<四、测试:文件类型的脚本>
<五、测试:利用脚本函数建立删除并设置密码>