【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 完整的主机名
\t 24小时制时间,格式为 “HH:MM:SS”
\A 24小时制时间,格式为 “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. 位置参数变量

- 这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
位置参数变量 作用
$n n为数字,$0代表命令本身,$1-91910,9代表第1到第9个参数,10以上的参数需要用大括号包含,如{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))
        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秒,输入的内容存到变量username中
   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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章