【linux】shell变量——环境变量设置修改、⽤户⾃定义变量、read等⼀、变量
1.变量的命名规范
- 必须以字母或下划线开头,名字中间只能由字母、数字和下划线组成
- 变量名称长度不得超过255个字符
- 变量名称在有效范围内必须是唯⼀的
- 变量默认类型都是字符串(重点)
2. 变量分类
- 字符串
- 整数
- 浮点
- ⽇期
3. ⽤户⾃定义变量
- 这些变量的值都是⾃⼰定义的
- 变量名不能以数字开头
- 等号左右两边不能有空格(重点)
4. 定义变量
name="yuhua"
age=10
5. 输出变量值
echo $变量名
6. 值默认都是字符串
x=1
y=2
z=3
z=$x+$y+$z
echo $z//结果是1+2+3,注意这⾥的+也是字符串,可不是连接符
7. set
- 查询系统中默认所有已经⽣效的变量,包括系统变量,也包括⾃定义变量
- set命令是⽤于查看所有变量的
set | grep yuhua
8. unset
- 删除变量
unset a
9. 环境变量
- 环境变量是全局变量,⽽⾃定义变量是局部变量
- ⾃定义变量会在当前的shell中⽣效,⽽环境变量会在当前shell以及其⼦shell中⽣效
- 这种变量主要保存的是和系统操作环境相关的数据
- 变量可以⾃定义,但是对系统⽣效的环境变量名和变量作⽤是固定的
bash //进⼊⼦shell
pstree //查看进程树
exit //退出⼦shell,进⼊⽗shell中
10. ⾃定义环境变量
export 变量名=变量值
export evname=prod
11. env
- 仅仅⽤来查看环境变量,⽽看不到本地变量
env
12. 常⽤环境变量
变量名含义⽰例
HOSTNAME主机名HOSTNAME=localhost SHELL当前的shell SHELL=/bin/bash
TERM终端环境TERM=xterm
HISTSIZE历史命令条数HISTSIZE=1000
SSH_CLIENT当前操作环境如果是⽤SSH连接的话,这⾥会记录客户端IP SSH_CLIENT=192.168.1.100 57596 22
SSH_TTY SSH连接的终端SSH_TTY=/dev/pts/1
USER当前登录的⽤户USER=root
13. path
- 系统搜索路径
echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
- 如果想把⼀个⾃定义的脚本直接可以执⾏,有三种办法:
- ⽅法⼀:把这个⽂件拷贝到⽬标⽬录下
- ⽅法⼆:在环境变量的⽬录中,设置软链接,链接到需要执⾏的⽂件
//假设在/root/yuhua下有⼀个yh.sh,现在需要实现执⾏yh.sh⽂件,可以⽤环境变量⽬录中设置软链接的⽅式,具体如下:
//⽤echo $PATH查看环境变量⽬录
//进⼊环境变量的额⽬录/usr/bin
ln -s /root/yuhua/yh.sh yh.sh
//这样就可以直接使⽤yh.sh去执⾏yh.sh⽂件了
- ⽅法三:把脚本所在⽬录添加到环境变量中的PATH路径中
#!/bin/bash
echo hello
./hello.sh
/root/myshell/hello.sh
export PATH="$PATH":/root/myshell //临时⽣效,这句话的意思就是将环境变量⽬录增加⼀个/root/myshell,这样执⾏hello.sh,如果不到该⽂件,那么就回去$PATH对应的环境变量⽬录中去,所以就会到/root/myshell下的hello.sh
hello.sh
14. $PS1
# echo $PS1
[\u@\h \W]\$
root@localhost myshell]#
变量提⽰符
\d显⽰⽇期,格式为"星期 ⽉ ⽇"
变量提⽰符
\H完整的主机名
\t24⼩时制时间,格式为 “HH:MM:SS”
\A24⼩时制时间,格式为 “HH:MM”
\u显⽰当前⽤户名
\w显⽰所在⽬录完整名称
\W显⽰所在⽬录的最后⼀个⽬录
$提⽰符,root为#,普通⽤户为$
export PS1='[\u@\h \w]\$ '
15. 语系环境变量
- 查询当前系统语系
- 在Linux中通过locale来设置程序运⾏的不同语⾔环境,locale由ANSI C提供⽀持。locale的命名规则为<;语⾔>_<;地区>.<;字符集编码>,如zh_CN.UTF-8,zh代表中⽂,CN代表⼤陆地区,UTF-8表⽰字符集
- LANG:定义系统主语系的变量
locale//查看语⾔体系
LANG=zh_CN.UTF-8//修改语⾔
echo $LANG//当前设置的语⾔
//以上是临时修改
//以下是永久修改
vi /etc/sysconfig/i18n //进去后把LANG的值改了就可以了
16.中⽂⽀持
- 图形界⾯可以⽀持中⽂
- 第三⽅⼯具⽐如xshell语系设置正确可以⽀持中⽂
- 虚拟机中纯字符界⾯不⽀持中⽂
- 为啥xshell这些终端可以⽀持中⽂,⽐如创建中⽂名字的⽂件,那是因为xshell这个终端去实现了,但是真正进⼊虚拟机的字符界⾯,在xshell⾥创建的中⽂名字的⽂件,名字就成了乱码
17. 位置参数变量
- 这种变量主要是⽤来向脚本当中传递参数或数据的,变量名不能⾃定义,变量作⽤是固定的
位置参数变量作⽤
9代表第1到第9个参数,10以上的参数需要⽤⼤括号包含,如$n n为数字,$0代表命令本⾝,$1-{10}
$*这个变量代表命令中所有的参数,$*把所有的变看数看成⼀个整体
$@这个变量也代表命令⾏中所有的参数,不过$@把每个参数进⾏区分
$#这个变量代表命令⾏中所有参数的个数
//创建 sum.sh ,内容如下:
#!/bin/bash
num1=$1 //表⽰传⼊的第⼀个参数
num2=$2 //表⽰传⼊的第⼆个参数
sum=$((num1+num2)) //$(())表⽰运算
echo $sum
//执⾏sum.sh,并且传⼊参数
sh sum.sh 2 4 //后⾯传的2和4都是参数,分别对应$1和$2
/
/输出6
//如果想知道执⾏过程,可以切换到调试模式,加操作符-x
sh -x sum.sh 2 4
//假设⽂件yh.sh的内容如下:
#!/bin/bash
echo "$@"
echo "$*"
for i in "$@"
do
echo "i=$i"
done
/
/然后执⾏这个⽂件,
sh yh.sh 2 3 4 5
//echo "$@"会打印出 2 3 4 5,每个参数都是独⽴项
//echo "$*"会打印出‘2 3 4 5’,所有参数是⼀项
//for循环打印出:
//i=2
//i=3
//i=4
//i=5
//求输⼊参数的和
#!/bin/bash
sum=0
for i in "$@"
do
sum=$(($sum+$i))
linux安装jdk环境变量done
echo "sum=$sum"
//执⾏
sh sum.sh 1 2 3 4 5
18. 预定义变量
- 是脚本中已经定义好的变量,变量名不能⾃定义,变量作⽤也是固定的
位置参数变量作⽤
$?最后⼀次执⾏的命令的返回状态。0表⽰正确执⾏,⾮0表⽰不正确执⾏
$$当前进程的进程号(PID)
$!后台运⾏的最后⼀个进程号(PID)
ls && echo yes
19. read
- ⽤于读取⽤户的输⼊信息
- read[选项][变量名]
选项含义
-p提⽰信息,在等待read输⼊时,输出提⽰信息
选项含义
-t秒数: read命令会⼀直等待⽤户输⼊,使⽤此选项可以指定等待时间
-
n字符数,read命令只接受指定的字符数,就会执⾏
-s隐藏输⼊的数据,适⽤于机密信息的 输⼊
- 举例:写⼀个脚本,让⽤户输⼊⽤户名,性别,密码
#!/bin/bash
read -p "请输⼊您的⽤户名:" -t 10 username //这句话的意思就是提⽰"请输⼊您的⽤户名:",最长等待⽤户输⼊的时间是10秒,输⼊的内容存到变量usernam e中
echo -e "\n"
read -p "请输⼊您的性别[m/f]:" -n 1 gender //-n 1代表只能输⼊⼀个字符,输⼊1个字符后⾃动执⾏下⼀条命令,内容存到gender变量中
echo -e "\n"
read -p "请输⼊密码:" -s password //-s 表⽰⽤户输⼊不显⽰
echo -e "\n"
echo -e "您输⼊的信息为:\r\n"
echo -e " ⽤户名为:$username\r\n"
echo -e " 性别为:$gender\r\n"
echo -e " 密码为:$password\r\n"
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论