一、变量
1.1 变量命名规则
- 开头为字符或下划线,名字中间中能有字母、数字和下划线组成;
- 变量的长度不超过255个字符;
- 变量名在有效的范围内必须是唯一的; //如再次定义则会替换上一个变量的值
-
在Bash中,
变量的默认类型都是字符串型
。//即系统把所有值都当作字符串放到变量中,不论这个“字符串”实际上是整数、浮点数等等。
1.2 变量类型
1.2.1 用户自定义变量
1、变量=值 e.g x=5 注意,变量名只能是字母、下划线、数字组成且不能以数字开头,=号左右不可有空格
2、""
会解析特殊符号,例如$
,''
不会解析特殊符号
3、引用变量:$变量名
例如:$x
4、所有变量默认的值都是字符串类型,不可做Math
运算。
5、变量叠加 e.g y="$x"123
或者 y=${x}123
6、查看变量 set
会列出系统中所有的变量,包括环境变量和自定义变量set -u
//设定当调用不存在变量时,会提示错误
7、删除变量 unset
变量名 例如:unset x 注意没有$。
1.2.2 环境变量
1.2.2.1 环境变量与用户自定义变量的区别
环境变量是全局变量,用户自定义变量是局部变量。
用户自定义变量只在当前的 shell
中生效,环境变量在当前 shell
和这个 shell
的所有子 shell
中生效。
1.2.2.2 用户自定义环境变量
export 变量名=变量值
或
变量名=变量值
export 变量名
1.2.2.3 查看环境变量
set 查看所有变量
env 查看环境变量
1.2.2.4 删除环境变量
unset 环境名
1.2.2.5 常用的环境变量
HOSTNAME:主机名
SHELL:当前的 shell
TERM:终端环境
HISTSIZE:历史命令条数
SSH_CLIENT:当前操作环境是用 ssh 连接的,这里记录客户端 ip
SSH_TTY:ssh 连接的终端是 pts/1
USER:当前登录的用户
PATH:系统搜索命令的路径
要想直接通过脚本名执行自己的脚本:
(1)将脚本拷贝至 PATH
中的任意目录下(不建议这样做),例如:cp hello.sh /bin/
(2)将脚本所在目录添加到 PATH 变量中
(变量叠加),例如:PATH="$PATH":/root/sh
,但系统重启后失效。
PS1:命令提示符设置
\d:显示日期,格式为"星期 月 日"
\H:显示完整的主机名
\t:显示 24 小时制时间,格式为"HH:MM:SS"
\A:显示 24 小时制时间,格式为"HH:MM"
\u:显示当前用户名
\w:显示当前所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\$:提示符。root 用户为"#",普通用户为"$"
1.2.3 语系变量
当前语系查询:locale
//直接生效的是LANG
变量(默认语系) LC_ALL
:定义整体语系(不常用)
echo $LANG //当前语系环境
echo $LC_ALL //整体语系环境
locale -a | more 查看Linux支持的所有语系环境
cat /etc/sysconfig/i18n //下次开机以后的系统环境
LANG=zh_CN.UTF-8 //切换成中文
1.2.4 位置参数变量
$n:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 ${10}。
$*:这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体。
$@:这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区分对待。
$#:这个变量代表命令行中所有参数的个数。
例子1:
#!/bin/bash
num1=$1
num2=$2
sum=$(($num1+$num2))
变量 sum 的和是 num1 加 num2
echo $sum
打印变量 sum 的值
linux默认变量都是字符串,所以用两个((来进行运算。
执行脚本:
$ ./test.sh 45 76
例子2:
#!/bin/bash
echo "A total of $# parameters"
#使用 $# 代表所有参数的个数
echo "The parameters is:$*"
#使用 $* 代表所有的参数
echo "The parameters is:$@"
#使用 $@ 代表所有的参数
执行脚本:
$ ./test.sh 11 22 33 44
例子3:$* 与 $@ 的区别
#!/bin/bash
for i in "$*"
# $* 中所有参数看成是一个整体,所以这个 for 循环只会循环一次
do
echo "The parameters is:$i"
done
for y in "$@"
# $@ 中每个参数都看成是独立的,所以 $@ 中有几个参数,就会循环几次
do
echo "Parameter:$y"
done
1.2.5 预定义变量
前面说到的逻辑或:||
-->ls || echo yes
前面一条语句正确执行,才执行后一条语句。这里就是通过执行命令的返回值来判断。逻辑与:&&
--> ls qwe && echo no
也是同样的道理。
可以通过一个简单的shell来展示一下:
sl.sh:
#!/bin/bash
ehco "dang qian de PID: $$"
find / hello.sh & //&放入后台执行
echo "hou tai de PID: $!"
chmod 755 sl.sh
,然后再执行:./sl.sh
;可以得到当前的测试的结果
read -n
read -p "please input name " name #-p表示输出提示信息 read [选项] 变量名
read -t 30 #-t 表示等待时间单位为秒 -t 30 表示30秒,若30秒后没有输入数据终止执行脚本
read -s #隐藏信息
echo -e "\n" 换行符
read.sh:
#!/bin/bash
read -p "please input your name:" -t 30 name
#等下输入,如果超过30秒不输入,就终止当前命令
echo $name
read -p "please input your password:" -s pwd
#输入的值是隐藏的,看不见的,但是在sh里面还是可以获取到的,并且输出的
echo -e "/n"
echo $pwd
read -p "please input your sex [M/F]:" -n 1 sex
#意思就是只能输入一个字符,且输入之后立马执行
echo -e "/n"
echo $sex
chmod 755 read.sh
---> ./read.sh
二、运算符
Shell
变量弱类型,默认字符串变量。
2.1 declare声明变量类型
declare [+/-][选项] 变量名
选项:
-
给变量设定类型属性+
取消变量的类型属性-a
将变量声明为数组型-i
将变量设定为整型(integer)-x
声明为环境变量-r
设置为只读属性-p
显示指定变量的被声明类型
2.1.1 声明数组变量
定义数组:movie[0]=zp movie[1]=tp declare -a movie[2]=live
调用数组:echo ${movie}
表示调用第一个echo ${movie[1]}
表示调用第二个echo ${movie[*]}
表示显示数组中的所有元素
2.1.2 声明环境变量
declare -x test =123
作用与export
相同。export
命令实际过程是调用declare
命令
列出系统中所有变量的类型:declare -p
2.2 数值运算的方法
2.2.1 方法一
aa=11 bb=22
declare -i cc=$aa+$bb
2.2.2 方法二
a=11 b=22
dd=$(expr $aa + $bb)
注:+
旁边一定要留空格。
2.2.3 方法三
gg=$(($aa+$bb)) //推荐该方法
或
gg=$[$aa+$bb]
注:$var=$(命令)
//先执行命令,然后再把结果给变量。gg=$(date)
//把系统函数输出值复制给gg
2.3 变量测试
unset y
x=${y-2}
echo $x --> x=2
y="" --> 将y的值设为空值
x=${y-2}
echo $x --> x= 空
y=1
x=${y-2}
echo $x --> x=1
三、环境变量配置文件
3.1 环境变量配置文件简介
用户自定义变量(本地变量)
环境变量:定义每个用户的操作环境, PATH PS1
eg:
echo $PS1
\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[35;40m\]\W\[\e[0m\]]\$
重新配置配置文件: source+配置文件
或者. 配置文件
eg :
[root@centos ~]# . .bashrc
[root@centos ~]# source .bashrc
环境变量配置文件简介:
PATH HISTSIZE PS1 HOSTNAME
环境变量配置文件主要是定义对系统操作环境系统生效的系统默认的
环境变量
~
代表家目录,每个用户都会有,家目录只是当前登录用户生效。
放在etc
会对所有用户
起作用。
以下是关于登录的5个环境变量配置文件。
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。