美文网首页
Shell part1.1变量类型

Shell part1.1变量类型

作者: smileboytop | 来源:发表于2018-08-25 16:36 被阅读0次

    shell 变量是用一个固定的字符串去表示不固定的内容,便于修改。

    ==变量类型==

    自定义变量  环境变量    位置变量和预定义变量


    =自定义变量=

    A. 特性

    1. 自定义变量(示例:ping01.sh引入变量)

    定义变量: 变量名=变量值 变量名必须以字母或下划线开头,区分大小写 ip1=192.168.2.115

    引用变量: $变量名 或 ${变量名}

    查看变量: echo $变量名; "set"可以查看所有变量(包括自定义变量和环境变量)

    取消变量: unset 变量名

    作用范围:

    仅在当前shell中有效

    B. 示例:

    使用变量前。麻烦

    ping -c1 192.168.100.10 &>/dev/null  && echo 192.168.100.10up || echo 192.168.100.10down

    使用变量后,简洁

    #!/bin/bash

    ip=192.168.100.10

    ping -c1 $ip &>/dev/null  && echo $ip  up ||  echo "$ip  down"

    C. 变量赋值(定义变量):

    1. 显式赋值:变量名=变量值

    示例:

    ip1=192.168.1.251

    school="BeiJing 1000phone"

    today1=`date +%F`

    today2=$(date +%F)

    2. read 从键盘读入变量值

    read 变量名

    read -p "提示信息: " 变量名

    read -t 5 -p "提示信息: " 变量名  //-t 等待5秒,后超时

    read -n 2 变量名            //-n  只记录几个字符

    示例:

    read -p "请输入您测试的IP地址:" ip

    ping -c1 $ip  &>/dev/null  && echo  " $ip up" || echo  "$ip  down"


    =环境变量(了解)=

    定义环境变量: 方法一 export back_dir2=/home/backup

    方法二 export back_dir1 将自定义变量转换成环境变量

    引用环境变量: $变量名 或 ${变量名}

    查看环境变量: echo $变量名 env 例如env |grep back_dir2

    取消环境变量: unset 变量名

    变量作用范围: 在当前shell和子shell有效 !!!

    使变量开机、登陆生效,将变量放到~/.bash_profile

    永久生效:写到四个登录脚本,/etc/profile ~/.baserc ~/.bash_profile /etc/bashrc


    =位置变量和预定义变量(了解)=

    语法命令    参数1 参数2 参数3 ....9以后特殊定义

    $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10} ...

    预先定义过的变量

    $0 脚本名

    $* 所有的参数

    $@ 所有的参数

    $# 参数的个数

    $$ 当前进程的PID

    $! 上一个后台进程的PID

    $? 上一个命令的返回值 0表示成功

    示例

    准备工作:

    # vim test.sh

    #!/usr/bin/bash

    echo "第2个位置参数是$2"

    echo "第1个位置参数是$1"

    echo "第4个位置参数是$4"

    echo "所有参数是: $*"

    echo "所有参数是: $@"

    echo "参数的个数是: $#"

    echo "当前进程的PID是: $$"

    echo '$1='$1

    echo '$2='$2

    echo '$3='$3

    echo '$*='$*

    echo '$@='$@

    echo '$#='$#

    echo '$$='$$

    演示结果如下:

    [root@localhost ~]# chmod +x test.sh

    [root@localhost ~]# ./1.sh  1 2 3 4 5 6 7 8 9

    第2个位置参数是2

    第1个位置参数是1

    第4个位置参数是4

    所有参数是: 1 2 3 4 5 6 7 8 9

    所有参数是: 1 2 3 4 5 6 7 8 9

    参数的个数是: 9

    当前进程的PID是: 1946

    $1=1

    $2=2

    $3=3

    $*=1 2 3 4 5 6 7 8 9

    $@=1 2 3 4 5 6 7 8 9

    $#=9

    $$=1946


    $*和$@区别(资料)

    shell中$*与$@的区别

    关于$* 和 $@的 一点 认识 同是菜鸟一起学习

    $*  所有的位置参数,被作为一个单词.

    注意:"$*"必须被“”引用.

    $@ 与$*同义,但是每个参数都是一个独立的""引用字串,

    这就意味着参数被完整地传递,并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的单词.

    注意:"$@"必须被“”引用.

    $@ $* 只在被双引号包起来的时候才会有差异

    双引号括起来的情况:

    $*将所有的参数认为是一个字段

    $@以IFS(默认为空格)来划分字段,如果空格在“”里面,不划分。采用LS的脚本运行./test 1 "2 3" 4  来发现差异

    没有括起来的情况是$@和$*一样的,见到IFS就划分字段。还是采用LS的脚本运行./test 1 "2 3" 4  来发现差异


    一个小例子 ,仅供参考

    [Copy to clipboard] [ - ]CODE:#!/bin/bash

    echo

    index=1

    echo "Listing args with\"\$*\":"

    for arg in "$*"

    do

    echo "Arg #$index=$arg"

    let "index+=1"

    done

    echo "所有的参数被认为是一个单词"

    echo

    index=1

    echo "Listing args with \"\$@\":"

    for arg in "$@"

    do

    echo "Arg #$index=$arg"

    let "index+=1"

    done

    echo "所有的参数被认为是各个独立的单词"

    echo

    index=1

    相关文章

      网友评论

          本文标题:Shell part1.1变量类型

          本文链接:https://www.haomeiwen.com/subject/vyegiftx.html