####shell中的变量####
1.变量的定义
- 变量即在程序运行过程中它的值是允许改变的量
- 变量是用一串固定的字符表示不固定的值的一种方法
- 变量是一种方便的占位符,用于引用计算机的内存地址,该地址可以储存Script运行时更改的程序信息
- 在shell中变量时不能永久保存在系统中的,必须在文件中声明
3.变量的命名规则 - 变量名称中包含大小写字母、数字和下划线
- 变量名必须以字母或下划线开头,变量名称不能超过255个字符
3.变量的调用
echo $变量名
echo ${变量名}
4.在shell脚本中变量的种类
在shell中变量分为环境级变量,用户级变量,系统级变量
- 环境级变量只在当前的shell中生效,shell关闭变量就会丢失;
[root@localhost mnt]# cat test.sh
####################################
#Author: Linux #
#Version: 7.3 #
#Mail: Linux@toto.com #
#Create_Date: 2019-08-21 05:11:11 #
#Description: #
# #
####################################
#!/bin/bash
echo $a ##编写脚本,输出变量a的值
[root@localhost mnt]# a=8 #定义变量
[root@localhost mnt]# echo $a #当前Shell环境中调用变量的值
8
[root@localhost mnt]# sh test.sh ##运行脚本的方法会在当前shell中开启一个子进程运行,所以无法输出a的值
export 定义环境变量可以在当前的shell以及子进程shell中使用该变量
[root@localhost mnt]# export a=3
[root@localhost mnt]# echo $a
3
[root@localhost mnt]# sh test.sh
3
- 用户级变量写在用户的骨文件中,指针对当前用户生效
vim /root/.bash_profile #修改用户家目录下的.bash_profile文件,只要是该用户就可以一直使用该变量
[root@localhost mnt]# vim /root/.bash_profile ##在该文件末尾添加定义的变量
[root@localhost mnt]# tail -1 /root/.bash_profile ##查看文件最后一行
export a=11 #定义的变量
[root@localhost mnt]# source /root/.bash_profile ##扫面文件加载新增配置
[root@localhost mnt]# echo $a #设置完成后直接输出变量
11
[root@localhost mnt]# su - student #切换到student用户
Last login: Tue Aug 20 21:23:01 EDT 2019 on pts/1
[student@localhost ~]$ echo $a ##无法使用定义的变量
[student@localhost ~]$ exit
- 系统级(PATH)变量被写在系统的配置文件/etc/profile或/etc/profile.d/中,对所有用户都生效
注意:PATH环境变量:用来指定系统查找存放命令的目录;
例如:存在一个脚本在/mnt中,无法在别的目录中使用脚本名称直接运行该脚本,只需将//mnt添加到PATH环境变量中就可以使用该脚本名称直接运行脚本(相当于告诉系统在/mnt中寻找该脚本)
5、字符的转译及变量的声明
\ 转译单个字符
" " 弱引用,批量转译“ ” 中出现的字符
' ' 强引用,批量转译 ‘ ’ 中出现的字符
${ } 变量声明
注意:
" "和' '的区别:
弱引用(“ ”) 不能转换\ ` ! $$这些符号
6.变量值的传递
方式一 :$n的方式
$1 脚本后的第一串字符
$2 脚本后的第二串字符
$3 脚本后的第三串字符
$# 脚本后所跟的字符串总个数
$@ 脚本后所跟的所有字符串,输出模式“1” “2” “3” 输出三个字符串
¥* 脚本后所跟的所有字符串 ,输出模式“1 2 3” 输出一个字符串
$$ 当前进程的pid
$0 运行的脚本的名称
脚本示例:
[root@localhost mnt]# cat test.sh
####################################
#Author: Linux #
#Version: 7.3 #
#Mail: Linux@toto.com #
#Create_Date: 2019-08-21 05:11:11 #
#Description: #
# #
####################################
#!/bin/bash
echo '$1' is $1
echo '$2' is $2
echo '$3' is $3
echo '$#' is $#
echo '$@' is $@
echo '$$' is $$
echo '$0' is $0
echo '$*' is $*
方式二:read的方式
该方式需要交互式输入变量的值
read name #定义变量name接下来需要输入的变量的值
read -s name #定义变量name接下来需要输入的变量值,参数-s 输入的加密不显示
read -p "please input username: " NAME #-p 先输出引号内的内容然后输入变量的值
7、linux系统中命令别名的设定
alias haha=“date” #直接在命令行中输入设定当前shell的命令别名
[root@localhost mnt]# haha ##输入haha
bash: haha: command not found... ##报错没有该命令
[root@localhost mnt]# date ##data命令
Thu Aug 22 02:32:45 EDT 2019
[root@localhost mnt]# alias haha="date" ##设定haha为date的别名
[root@localhost mnt]# alias ##查看命令的别名
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias haha='date' #成功添加haha
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost mnt]# haha ##haha命令和date执行结果一致
Thu Aug 22 02:33:09 EDT 2019
注意:命令行中的alias只用与当前环境和用户才可以
2.设定一个用户可以永久使用命令的别名
vim /root/.bashrc ##编辑用户家目录下的.bashrc文件
alias haha=‘date’ #写入设定的命令别名
source /root/.bashrc #重新加载添加的配置
注意:修改/root/.bashrc 文件只能root用户永久用该命令,别的用户不能使用
该方法在系统中的用户都可以永久使用别名命令
3.设定系统中用户都可以指用的命令别称
vim /etc/bashrc ##编辑配置文件
alias haha=‘date’ #写入设定的命令别名
source /etc/bashrc #重新加载添加的配置
source 只是加载文件新增的命令,并非刷新文件内容(删除文件内的内容后source无效)
那么如何取消系统中的命令别名?
1.删除文件中的别名设定
2. unalias haha ##删除系统中已经加载的配置
8、利用命令执行结果设定变量
将命令运行结果赋值给变量的两种方式:
HOSTNAME=$(hostname) ##指适用于shell
HOSTNAME=hostname
##通用
小知识点谁知道:
$? 命令执行之后产生的退出值范围【0-255】,0表示命令没有错误输出,其他值表示命令存在错误输出
#####Shell中的函数###
1.脚本中的函数
- 脚本中的函数是把脚本中复杂的语句块定义成一串简单的字符的方法;
- 该字符串为函数名,通过函数名调用函数
- 先要尽行函数的定义才能调用函数
函数的作用:缩减脚本长度、可以循环执行命令
2.函数的定义
函数名称()
{
语句块
}
[root@localhost mnt]# cat test.sh
####################################
#Author: Linux #
#Version: 7.3 #
#Mail: Linux@toto.com #
#Create_Date: 2019-08-21 05:11:11 #
#Description: #
# #
####################################
#!/bin/bash
RED( ) ##定义函数名称
{
echo -e "\033[31m$*\033[0m" ##执行命令的语句块 ##显示红色输出
}
RED "Hello world" #调用函数
[root@localhost mnt]# sh test.sh
Hello world
[root@localhost mnt]#