zoukankan      html  css  js  c++  java
  • 二:shell之bash变量

    1.变量的分类;


    用户自定义变量:   变量自定义 默认存储是字符串
    环境变量:              这种变量中主要保存的是和系统操作环境相关的数据。变量可以自定义,但是对系统生效的环境变量名和变量作用是固定的
    位置参数变量:      这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
    预定义变量:          是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的

    2.用户自定义变量

    1.定义变量
            格式:变量名称=变量值(=左右不能加空格)
     例如:
            x=5 就定义了一个叫 x 的变量
           注意 5 是字符,不是数字,不能加减乘除。
          name="hello world"

    2.变量调用
       在变量名之前加一个 $表示变量的值
            例如:输出变量的值
               echo $x
               echo $name

    3.变量叠加
         x=123
         x="$x"456 或  x=${x}456

    4.变量查看
          set 会显示当前系统中所有运行的变量
          set -u 如果设定此选项,调用未声明变量时会报错(默认无任何提示)

    5.删除变量
         unset 变量名
         例如:unset name

    3.bash环境变量

    1.环境变量与用户自定义变量的区别
             环境变量是全局变量,用户自定义变量是局部变量。
             用户自定义变量只在当前的 shell 中生效,环境变量在当前 shell 和这个 shell 的所有子 shell 中生效。
             用户可以自定义环境变量,但对系统生效的环境变量名和变量作用是固定的。

    2.用户自定义环境变量
             export 变量名=变量值

            变量名=变量值
            export 变量名

    3.查看环境变量
           set 查看所有变量
           env 查看环境变量

    4.删除环境变量
          unset 环境名

    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:显示完整的主机名
          :显示 24 小时制时间,格式为"HH:MM:SS"
          A:显示 24 小时制时间,格式为"HH:MM"
          u:显示当前用户名
          w:显示当前所在目录的完整名称
          W:显示当前所在目录的最后一个目录
          $:提示符。root 用户为"#",普通用户为"$"

    6:语系变量

        环境变量中的语系变量
        locale          #查询当前系统语系
        LANG        #定义系统主语系的变量
        LC_ALL #定义整体语系的变量
        echo $LANG #查看系统当前语系
        locale -a | more
       #查看Linux支持的所有语系

    查看默认语系
         cat /etc/sysconfig/i18n
    显示:
         LANG="zh_CN.UTF-8"
    #表示开机默认就是中文语系UTF-8编码

    4.位置参数变量

    1.位置参数变量
             $n:n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 ${10}。
             $*:这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体。
             $@:这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区分对待。
             $#:这个变量代表命令行中所有参数的个数。

    2.例子1:
     #!/bin/bash
         num1=$1
         num2=$2
         sum=$(($num1+$num2)) 
    #变量 sum 的和是 num1 加 num2
        echo $sum 
    #打印变量 sum 的值

    执行脚本:
        ./test.sh   45 76

    3.例子2
         #!/bin/bash
         echo "A total of $# parameters"
                                             #使用 $# 代表所有参数的个数
         echo "The parameters is:$*"
                                            #使用 $* 代表所有的参数
         echo "The parameters is:$@"
                                            #使用 $@ 代表所有的参数

    执行脚本:
               ./test.sh 11 22 33 44

    4.例子3:$* 与 $@ 的区别
    #!/bin/bash
    for i in "$*"
                             # $* 中所有参数看成是一个整体,所以这个 for 循环只会循环一次
    do
    echo "The parameters is:$i"
    done

    for y in "$@"
                     # $@ 中每个参数都看成是独立的,所以 $@ 中有几个参数,就会循环几次
    do
    echo "Parameter:$y"
    done

    5.预定义变量

    预定义变量:
      1.$?:最后一次执行的命令的返回状态。
         如果这个变量的值为0,证明上一个命令正确执行;

         如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
    2.$$:当前进程的进程号(PID)。
    3.$!:后台最后一个运行的进程的进程号(PID)。

    接收键盘输入:
        read [选项] [变量名]
        选项:
            -p "提示信息":在等待read输入时,输出提示信息
            -t 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间
            -n 字符数:read命令只接受指定的字符数,就会执行
            -s:隐藏输入的数据,适用于机密信息的输入

    read.sh:
    #!/bin/bash

    read -p "please input your name:" -t 30 name
    echo $name

    read -p "please input your passwd:" -s passwd
    echo -e " "
    echo $passwd

    read -p "please input your sex [M/F]:" sex
    echo -e " "
    echo $sex

  • 相关阅读:
    Android 一步步实现TCP客户端
    Docker 到底是什么?
    Java中的包机制
    一张图理解github
    Git 提交代码流程理解
    STM32+OV7670(带FIFO)+上位机
    | + logger
    使用 TCP 实现 HTTP
    高阶函数与函数的柯里化
    Python装饰器
  • 原文地址:https://www.cnblogs.com/cyzsoho/p/4840928.html
Copyright © 2011-2022 走看看