shell变量
- 变量定义与赋值,变量与值之间不得有空格
- 变量替换/引用
- 变量命名规则
- 名称定义要做到见名知意,切按照规则来,切不得引用保留关键字(help检查保留字)
- 只能包含数字、字母、下划线
- 不能以数字开头
- 不能用标点符号
- 变量严格区分大小写
- 变量的作用域
本地变量,只针对当前的shell进程
环境变量:也称为全局变量,针对当前shell以及其任意子进程,环境变量也分自定义、内置两种环境变量
局部变量:针对shell函数或是shell脚本中定义
位置参数变量:用于shell脚本中传递的参数。
特殊变量:shell内置的特殊功效变量
自定义变量
- 变量赋值: name=ni
- 变量引用:${name}、$name
双引号,会识别特殊符号
不同的执行方式,不同的shell环境
解答:
1.每次调用bash/sh都会开启一个子shell,因此不保留当前shell变量,通过pstree命令检查进程树
2.调用source是在当前shell环境加载脚本,因此保留变量。
环境变量设置
环境变量一般指的是用export内置命令导出的变量,用于定义shell的运行环境、保证shell命令的正确执行。shell通过环境变量确定登录的用户名、PATH路径、文件系统等各种应用。
环境变量可以在命令行中临死创建,但是用户退出shell终端,变量即丢失,如要永久生效,需要修改环境变量配置文件
用户个人配置文件 ~/.bash_profile、~/.bashrc远程登录用户特有文件
全局配置文件 /etc/profile、/etc/bashrc,且系统建议最好创建在/etc/profile.d/,而非直接修改主文件,修改全局配置文件,影响所有登录系统用户
检查系统环境变量的命令
- set:输出所有变量,包括全局变量、局部变量
- env:只显示全局变量
- declare:输出所有的变量,如同set
- export: 显示和设置环境变量的值
撤销环境变量
- unset 变量名,删除变量或函数
设置只读变量
readonly:不能修改变量的值,只有shell结束,只读变量失效。
bash多命令执行
特殊变量
shell的特殊变量,用在如脚本,函数传递参数使用,有如下特殊的,位置参数变量
特殊状态变量
Shell子串
bash一些基础的内置命名
echo命令
eval命令
执行多个命令
exec命令
不创建子进程,执行后续命令,且执行完毕后,自动exit。
read命令
[root@localhost ~]# read[选项][变量名]
选项
-p "提示信息“ | 在等待read输入时,输出提示信息 |
---|---|
-t 秒数 | read命令会一直等待用户输入,使用此选项可以制定等待时间 |
-n 字符数 | read命令值接受指定的字符数,就会执行 |
-s | 隐藏输入的数据,适用于机密信息的输入 |
#!/bin/bash
#Author: mlz
read -t 30 -p "Please input your name:" name
#提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中
echo "Name is $name"
read -s -t 30 -p "Please enter your ege: " age
#年龄是隐私,所以我们用“-s”选项隐藏输入
echo "Age is $age"
echo -e "\n"
read -n 1 -t 30 -p "Please select your gender[M/F]: " gender
#使用“-n l”选项只接收一个输入字符就会执行(都不用输入回车)
echo -e "\n"
echo "Sex is $gender"
shell子串的花式用法
[root@localhost /]# name=abcAHHIOac
[root@localhost /]# echo $name
abcAHHIOac
[root@localhost /]# echo ${name#a*c}
AHHIOac
[root@localhost /]# echo ${name##a*c}
[root@localhost /]#
特殊shell拓展变量
shell的特殊符号整理
shell数学运算
expr模式匹配
expr计算用于整数,有些运算符需要转译
xufan@cengdongdeiMac Documents % expr 3 \* 2
6
xufan@cengdongdeiMac Documents % expr 3 + 2
5
expr命令判断文件名后缀是否合法
#!/bin/bash
#从参数1中匹配一个字符串以.jpg结尾,并返回匹配上的字符串的长度,并且将输出写入到黑洞文件中
if expr "$1" ":" ".*\.jpg" &> /dev/null
then
echo "这的确是以jpg结尾的文件~"
else
echo "这不是jpg文件"
fi
bc命令
bc命令当做计算器来用的,命令行的计算器
把计算式子通过管道符传给bc命令
xufan@cengdongdeiMac Documents % re=`echo "$num*3" | bc`
xufan@cengdongdeiMac Documents % echo $re
9
awk计算
awk既支持整数也支持小数计算
awk支持if条件判断,数组等等
xufan@cengdongdeiMac Documents % echo "3.2 2.2" | awk '{print $1+$2}'
5.4
中括号运算
xufan@cengdongdeiMac Documents % echo $[4*2]
8
shell的条件测试
条件测试常用的语法
test条件测试
test命令评估一个表达式,他的结果是真,还是假,如果条件为真,那么命令执行状态码结果就为0,否则就是不为0,通过$?取值
test的语法参数大全
1.针对文件类型判断真假
2.关于文件的权限侦测,如 test -r filename
3.两个文件之间的比较, 如:test file1 -nt file2
4.关于两个整数之间的判定,例如 test n1 -eq n2
5.判断字符串的数据
6.多重条件判定,例如:test -r filename -a -x filename
在shell中,对于真假判断的逻辑,提供&& 与运算 ||或运算
A条件 && B条件:当A条件成立,并且执行B条件
A条件||B条件:当A条件不成立的时候,才会执行B条件。