精华内容
下载资源
问答
  • Shell中的变量

    2018-01-20 12:10:56
    Shell中的变量

    Shell中的变量

    当脚本中使用某个字符串较频繁并且字符串长度很长时就应该使用变量代替;


    变量命令规则

    • 变量名和等号之间不能有空格;
    • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头;
    • 中间不能有空格,可以使用下划线_;
    • 不能使用标点符号;
    • 不能使用bash里的关键字(可用help命令查看保留关键字);

    变量类型

    1,局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。

    2, 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。

    3, shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行。


    变量分类

    普通变量:只要遵循变量的命名规则就可以定义;
    只读变量:在定义了变量之后,把此变量定义成只读的(例如:readonly e),此时此变量将不能被修改也不能被删除。
    内置变量
    $0:表示脚本本身
    $1:第一个参数
    $2:第二个参数
    $#:表示参数的个数
    删除变量:删除变量很简单。语法为:unset 变量名 ,变量被删除,不能再次使用。注意:unset 命令不能删除只读变量。


    示例

    [root@dl-001 shell]# vim if.sh
    #!/bin/bash
    e=6             //e就是我定义的一个变量,并赋值为6
    readonly e      //把变量e定义成只读的;
    if [ $e -gt 7 ]        //使用if判断语句来判断e变量的大小
    then
            echo "大于7了"
    elif [ $e -lt 7 ]
    then
            echo "小于7了"
    fi
    [root@dl-001 shell]# sh if.sh       //执行该变量
    小于7了
    
    
    
    [root@dl-001 shell]# vim if.sh  //在把变量e定义成只读的基础上更改此变量
    #!/bin/bash
    e=6
    readonly e
    e=8             //更改为8
    if [ $e -gt 7 ]
    then
            echo "大于7了"
    elif [ $e -lt 7 ]
    then
            echo "小于7了"
    fi
    [root@dl-001 shell]# sh if.sh 
    if.sh:行5: e: 只读变量       //可见报错,定义成只读变量时不能修改和删除;
    
    
    # 用户交互模式
    
    [root@dl-001 shell]# vim sum.sh
    #!/bin/bash
    read -p "第一个数:" x       // read命令用于和用户交互,它把用户输入的字符串作为变量值,可以使用-t选项指定读取值时等待的时间(超出时间后自动退出脚本)。
    read -p "第二个数:" y
    sum=$[$x+$y]
    echo "$x+$y=$sum"
    
    [root@dl-001 shell]# sh sum.sh 
    第一个数:1
    第二个数:2
    1+2=3
    

    变量中的字符串

    单引号

    str='This single quotation mark'

    单引号字符串的限制

    • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
    • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

    双引号

    name='haha'
    str="I know your are \"$name\"! \n"

    双引号的优点

    • 双引号里可以有变量
    • 双引号里可以出现转义字符

    获取字符串长度

    str="abcdddd"
    echo ${#string} #输出 7

    提取子字符串

    str="Extraction substring"
    echo ${str:1:4} # 输出 xtra

    说明:从字符串第 2 个字符开始截取 4 个字符


    查找子字符串

    查找字符 “t” 的位置:

    str="Extraction substring"
    echo `expr index "$str" t`  # 输出 3

    拼接字符串

    name="dl"
    str="hello,"$dl"!"
    str_2="hello, ${dl} !"
    展开全文
  • shell中的变量

    2018-06-21 17:46:22
    1.变量的定义 变量即在程序运行过程中它的值是允许改变的量 变量是用一串固定的字符来标示不固定的值的一种方法 变量是一种使用方便的占位符,...在shell中变量是不能永久保存在系统中的,必须在文件中声明 2....

    1.变量的定义

    变量即在程序运行过程中它的值是允许改变的量
    变量是用一串固定的字符来标示不固定的值的一种方法
    变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script运行时可更改的程序信息
    在shell中变量是不能永久保存在系统中的,必须在文件中声明

    2.变量的种类

    ·在shell中变量分为环境级变量,用户级变量,系统级变量。
    ·环境级变量只在当前shell中生效,shell关闭变量丢失
    ·用户级变量写在用户的骨文件中,只针对当前用户生效
    ·系统级变量被写在系统的配置文件/etc/profile或者/etc/profile.d/中,对于所有用户都生效

    3.变量的定义方法

    1)环境级

    如果直接定义a=1,在当前shell里直接执行echo $a,执行结果为1
    但是把echo $a写进脚本里,执行脚本的时候,执行结果是空的
    因为执行脚本的时候会重新开启一个shell,在新的shell没有定义a=1的值
    所以要环境级变量export a=1
    [root@localhost ~]# export a=1

    这里写图片描述
    关闭当前shell重新打开后变量丢失
    这里写图片描述
    2)用户级

    [root@localhost ~]# vim ~/.bash_profile
    export a=1
    [root@localhost ~]# source ~/.bash_profile #刷新

    这里写图片描述
    切换用户变量丢失
    这里写图片描述
    3)系统级

    [root@localhost ~]# vim /etc/profile
    export a=1

    这里写图片描述
    切换用户变量仍然生效
    这里写图片描述

    4.变量名称的规范

    变量名称中通常包含大小写字母,数字,下划线
    变量名称格式
    LINUX_CSDN
    Linux_Csdn
    linuX_Csdn

    5.字符的转译和变量的声明

    1)\    #转译单个字符
    2""   #弱引用,批量转译
    3''   #强引用,批量转译
    ""''的区别在于""不能转译"\","`","!","$"
    4${}  #变量声明

    例子:
    1)\ 转译单个字符
    这里写图片描述
    2)双引号与单引号的区别

    [root@localhost ~]# echo '#########`hostname`#########'
    #########`hostname`#########
    [root@localhost ~]# echo "#########`hostname`#########"
    #########localhost#########

    单引号将`符号转译为普通字符和hostname一起输出,双引号没有转译这个符号的功能,所以执行了hostname这个命令然后输出了主机名
    这里写图片描述

    5.变量值传递

    $1   脚本后的第一串字符串
    $2   脚本后的第二串字符串
    $3   脚本后的第三串字符串
    $#   脚本后的字符串的个数
    $*   脚本后的所有字符串,模式为“1 2 3$@   脚本后的所有字符串,模式为“1”“2”“3

    例如:

    [root@localhost mnt]# vim file.sh
    #!/bin/bash
    echo \$1 is $1
    echo \$2 is $2
    echo \$3 is $3
    echo \$# is $#
    echo \$* is $*
    echo \$@ is $@
    [root@localhost mnt]# sh file.sh 
    [root@localhost mnt]# sh file.sh linux
    [root@localhost mnt]# sh file.sh linux lin
    [root@localhost mnt]# sh file.sh linux lin li
    

    这里写图片描述

    $*与$@的区别举例:
    [root@localhost mnt]# vim file1.sh
    #!/bin/bash
    for name in "$*"
    do
       echo $name
    done
    [root@localhost mnt]# vim file2.sh
    #!/bin/bash
    for name in "$@"
    do
       echo $name
    done
    [root@localhost mnt]# sh -x file2.sh linux lin li   --->执行了三次
    [root@localhost mnt]# sh -x file1.sh linux lin li   --->执行了一次

    这里写图片描述

    例子:
    建立用户,用户名为userfile文件的内容,密码为passwordfile文件里的内容并判断脚本后字符串的个数是否为两个

    [root@localhost mnt]# vim user_create.sh 
    #!/bin/bash
    [ "$#" -eq 2 ]||{
             echo please input userfile and passwordfile!!
             exit 1
    }
    MAX_LINE=`wc -l $USERFILE|cut -d " " -f 1`
    for LINE_NUM in `seq 1 $MAX_LINE`
    do
        USERNAME=`sed -n "${LINE_NUM}P" $USERFILE`
        PASSWORD=`sed -n "${LINE_NUM}P" $PASSFILE`
        useradd $USERNAME
        echo $PASSWORD | passwd --stdin $USERNAME
    done

    这里写图片描述
    脚本内容:
    这里写图片描述

    6.read实现变量传递

    例1:判断输入的ip主机是否开启

    [root@localhost mnt]# vim ip_check.sh
    #!/bin/bash
    read -p "Please input a number: " IP    #如果不想显示输入的IP地址,可以加-s
    ping -c1 -w1 $IP &> /dev/null && echo $IP is up || echo $IP is down
    [root@localhost mnt]# sh ip_check.sh
    Please input a number: 172.25.254.140
    172.25.254.140 is down
    [root@localhost mnt]# sh ip_check.sh
    Please input a number: 172.25.254.152
    172.25.254.152 is up

    这里写图片描述
    脚本内容:
    这里写图片描述
    例2:根据所输入用户名文件和密码文件建立用户,并判断输入的文件是否存在

    [root@localhost mnt]# vim user_create.sh 
    #!/bin/bash
    read -p "Please input a userfile: " USERFILE
    [ -e $USERFILE ]||{
             echo -e "\033[31m$USERFILE is not exist!!\033[0m"
             exit 1
    }
    read -p "Please input a passwordfile: " PASSWORDFILE
    [ -e $PASSWORDFILE ]||{
             echo -e "\033[31m$PASSWORDFILE is not exist!!\033[0m"
             exit 1
    }
    MAX_LINE=`awk 'BEGIN{N=0}{N++}END{print N}' $USERFILE`
    for LINE_NUM in `seq 1 $MAX_LINE`
    do
         USERNAME=`sed -n "${LINE_NUM}p" $USERFILE`
         PASSWORD=`sed -n "${LINE_NUM}p" $PASSWORDFILE`
         useradd $USERNAME
         echo $PASSWORD | passwd --stdin $USERNAME
    done

    这里写图片描述
    脚本内容:
    这里写图片描述

    7.别名设定

    1) alias xie=’vim’ 关闭当前shell则失效

    [root@localhost mnt]# alias xie=vim
    [root@localhost mnt]# xie
    [root@localhost mnt]# alias
    alias xie='vim'

    这里写图片描述
    2) vim .bashrc 切换用户则失效

    [root@localhost ~]# vim .bashrc 
    [root@localhost ~]# source .bashrc 
    [root@localhost ~]# alias
    alias xie='vim'

    这里写图片描述
    切换用户失效
    这里写图片描述
    3) vim /etc/bashrc 切换用户仍然有效

    [root@localhost ~]# vim /etc/bashrc 
    [root@localhost ~]# source /etc/bashrc 
    [root@localhost ~]# alias
    alias xie='vim'

    这里写图片描述
    切换用户仍然有效
    这里写图片描述
    4)撤销设定:unalias xie
    把文件里的别名设置删掉然后执行unalias
    这里写图片描述

    8.exit退出值

    0 # 以一个真实值退出,表示正常退出
    1 # 带假值退出
    2 #用法不当
    126 # 找到了要执行的文件,但它不是可执行的实用程序
    127 # 未找到要执行的实用程序.
    128 # 一个命令被一个信号打断了

    例子:编写脚本利用exit退出值检测所输入ip的主机是否打开

    [root@localhost mnt]# vim ip_check.sh 
    read -p "please input an IP: " IP
    ping -c1 -w1 $IP &> /dev/null
    num=`echo $?`
    [ "$num" = 0 ] &&{
        echo $IP is up
    }||{
        echo $IP is down
    }
    [root@localhost mnt]# sh ip_check.sh
    please input a IP: 172.25.254.222
    172.25.254.222 is down
    [root@localhost mnt]# sh ip_check.sh
    please input a IP: 172.25.254.140
    172.25.254.140 is up

    这里写图片描述
    脚本内容:
    这里写图片描述

    9.脚本中的函数

    把一个复杂语句块定义成一个字符串的方法,可以让一个命令循环执行
    例如:

    [root@localhost mnt]# vim ip_check.sh 
    #!/bin/bash
    PING()
    {
        read -p "Please input a number: " IP
        [ "$IP" = exit ]&&{
                 echo bye
                 exit 0
        }
        ping -c1 -w1 $IP &> /dev/null  &&{
          echo $IP is up
       }||{
          echo $IP is down
       }
       PING
    }
    PING
    [root@localhost mnt]# sh ip_check.sh
    Please input a number: 172.25.254.155
    172.25.254.155 is up
    Please input a number: 172.25.254.111
    172.25.254.111 is down
    Please input a number: exit
    bye

    执行如下:
    这里写图片描述
    脚本内容:
    这里写图片描述

    展开全文
  • bash shell中的变量

    千次阅读 2018-04-01 22:42:25
    本篇博客我们来讨论一下bash shell中的变量的使用。 声明变量和取消变量 声明变量时,语法是name=value,左侧是变量名,右侧是变量的值,中间的等号两侧没有空格。 $ str=hello $ echo $str hello 取消变量...

    本篇博客我们来讨论一下bash shell中的变量的使用。

    声明变量和取消变量

    声明变量时,语法是name=value,左侧是变量名,右侧是变量的值,中间的等号两侧没有空格。

    $ str=hello
    $ echo $str
    hello
    

    取消变量使用unset name的形式

    $ unset str
    $ echo $str
    
    

    访问变量

    从上面可以看出,访问变量时是使用$name的形式。

    除此之外,在声明变量时还可以在双引号内引用变量

    $ str=hello
    $ msg="$str,world"
    $ echo $msg
    hello,world
    

    在双引号内,变量的值会被计算,而如果使用单引号的话,则引号内的所有变量都不会被计算。

    变量的作用域

    在bash中,变量可以分为两类,分别是环境变量和自定义变量,环境变量相当于全局变量,而自定义变量相当于局部变量。环境变量可以被子进程所访问,而自定义变量则不能被子进程访问到。

    通过export关键字,可以将自定义变量升级为环境变量。

    接着上面的msg变量,直接输入bash命令开启一个子进程,然后msg变量是不能被访问到的

    $ bash
    $ echo $msg
    
    
    

    接下来使用export关键字来将msg升级为环境变量,再进入子进程,该变量就能够被访问到了

    $ exit
    exit
    $ export msg
    $ bash
    $ echo $msg
    hello,world
    

    变量的类型

    在bash shell中,可以使用declare关键字来声明变量的类型。declare的用法如下:

    declare [-aixr] varable
    参数:
    -a  将后面的变量声明为数组类型(array)
    -i  将后面的变量声明为整数类型(integer)
    -x  同export,将后面的变量声明为环境变量
    -r  将变量声明为readonly类型,只读。
    

    来看一个跟变量类型相关的例子

    $ sum=1+2+3
    $ echo $sum
    1+2+3
    

    很显然,这个变量的内容和我的预期是不一致的,我希望看到的结果是计算出一个和。这时候,就可以使用declare关键字声明一个integer类型的变量

    $ declare -i sum=1+2+3
    $ echo $sum
    6
    

    除此之外还有一种专门用来做计算的形式:$((exp)),来看一个例子

    $ sum=$((1 + 2 + 3))
    $ echo $sum
    6
    

    表达式中间还可以加空格。

    变量的删除和替换

    这是一个很有意思的机制。先来看个例子吧。

    删除

    $ msg=hello,world
    $ echo ${msg#hello,}
    world
    

    ${}是外层的,来启动删除或替换模式
    #表示从开头位置删除,并且删除的越少越好

    接下来看看两个井号的功能。

    $ msg="hello,world;hello,linux"
    $ echo ${msg##hello*,}
    linux
    

    可以看出来,两个井号的功能是从开头位置删除,并且删除的越多越好。里面还有一个*号,表示任意多个字符,所以就直接删除到了最后一个逗号。

    除此之外,还有一个特殊的符号是%%表示从结尾处开始删除,并删除的越少越好,而%%表示从结尾位置开始删除,并删除的越多越好。

    $ msg="hello,world;hello,linux"
    $ echo ${msg%%,*}
    hello
    

    替换

    除了删除的四种用法外,还有两种替换的方式

    $ msg="hello,world;hello,linux"
    $ echo ${msg/hello/HELLO}
    HELLO,world;hello,linux
    

    第一个/后面是旧字符,第二个/后面是新字符,结果就是:搜索第一组旧字符并替换为新字符(只替换一次)。还可以用两个斜杠//来替换全部关键字

    $ msg="hello,world;hello,linux"
    $ echo ${msg//hello/HELLO}
    HELLO,world;HELLO,linux
    

    变量的测试与内容替换

    变量的测试与内容替换主要包含几个特殊符号,分别是-,+,?。下面先来说一下减号-。减号前面是被测试的变量,后面是默认值,意思是,如果被测试的对象没有定义,则使用减号后面给出的默认值。测试与替换的表达式需要写到${}里面才会被执行。下面来看个例子

    首先,unset上面用到的的所有变量

    $ unset msg
    $ unset str
    

    然后给msg赋值,并且测试str的内容

    $ msg=${str-defaultvalue}
    $ echo $msg
    defaultvalue
    

    由于str是空的,所以这个测试表达式使用的是减号后面的默认值。再来看一个被测试的变量有值的情况。

    $ str2="i have value"
    $ msg2=${str2-defaultvalue}
    $ echo $msg2
    i have value
    

    上面的变量str2是有值的,所以,默认值没有生效。

    有一种特殊的情况是,如果被测试的变量定义了,但值是空字符串,这种情况的结果往往会违背我们的预期。如果希望值为空字符串的变量也能在被测试后使用默认值,可以使用-:

    关于加号+的测试,结果与减号-正好相反,如果被测试的对象有定义,则替换为加号后面的值,否则,则忽略。看一个例子

    $ str="i hava value"
    $ msg=${str+"another value"}
    $ echo $msg
    another value
    

    加号+也可以配合冒号一起使用,则是+:,意思是空字符串也不会被替换。

    加冒号的情况下,空字符串视为没有定义,结果与没有定义时是一样的。

    还有一种问号?的情况,意思是如果变量没有定义,问号后面的值会被输出到stderr中。同样可以配合冒号一起使用?:,意思是被测试的变量是空字符串时,问号后面的内容也会被发送到stderr中。下面来看个例子

    $ unset msg
    $ unset str
    $ msg=${str?"undefined !"}
    bash: str: undefined !
    

    变量的substring

    ${parameter:offset}
    ${parameter:offset:length}
    

    语法如上。

    $ name='hello,world'
    ${name:2:3}
    llo
    $ echo ${name:2}
    llo,world
    $ echo ${name: -3}
    rld
    

    如果参数小于0,则数字前面要带有一个空格。参数小于0的意思是从后往前取一个固定长度的子串。

    展开全文
  • Shell中的变量和符号

    2019-03-04 19:13:40
    Shell中的变量 变量 shell 变量 可以保存如路径名、文件名或者一个数字  变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。  在Bash中,变量的默认类型都是字符串...

    Shell中的变量
    变量
    shell 变量 可以保存如路径名、文件名或者一个数字
     变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。
     在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必修指定变量类型为数值型。

    变量分类
    本地变量(用户变量) 局部变量只在创建它们的Shell中使用,可以在shell程序内任意使用和修改它们。
    环境变量 可以在创建它们的Shell及其派生出来的任意子程序中使用。有些变量是用户创建的,其他的则是专用的(比如PATH、HOME)
    。是系统环境的一部分,不必去定义它们,可以在shell程序中使用它们 。还能在shell中加以修改。
    内部变量 由系统提供的。与环境变量不同,但用户不能修改它们。

    本地变量
     本地变量 在用户现在的shell生命期的脚本中使用
     变量名=值
    注意:
     (1)等号两边不可以有空格
     (2)取值包含空格,必须用双引号括起来
     (3)Shell变量可以用大小写字母,区分大小写

    变量的声明和使用
    (1)变量是弱类型的(不用声明类型)
    (2)变量声明及赋值格式
    变量=值(等号两边不能有空格)
    (3)变量的引用
    $变量名
    ${变量名}
    变量名为1个字符时建议使用方式一,多余一个字符时建议使用方式二
    举例: $a
    ${abc}

    显示变量
    echo命令可以显示单个变量取值,变量名前加$

    echo显示输出
     echo命令介绍
     功能说明:显示文字。
    语 法:echo [-ne][字符串] / echo [–help][–version]
    补充说明:echo会将输入的字符串送往标准输出。输出的字符串间以空白字符隔开, 并在最后加上换行号。
    参 数:
    -n 不要在最后自动换行
    -e 打开反斜杠ESC转义。若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:

    \t 插入tab;
    \ 插入\字符;
    -help 显示帮助
    -version 显示版本信息

    清除变量
    unset 变量名
    举例:echo nameunsetname(name{name} unset name (注意:name前没有)
    显示本地所有变量 set

    环境变量
    环境变量用于所有用户进程(通常称为子进程)。登陆进程称为父进程,通过pstree可以查看
    环境变量可以用于所有子程序,着包括编辑器、脚本和应用
    举例:vi a.sh
    #!/bin/bash
    #检测环境变量
    echo “家目录是 $HOME”
    环境变量可以在命令行中设置,但用户注销时这些值将丢失
     环境变量均为大写
     必须用export命令导出

    设置环境变量
     variable-name=value
     export variable-name(环境变量名大写)
    显示环境变量
     env 可以看到所有的环境变量
     echo $环境变量名 (显示一个变量)
    清除环境变量
     unset 环境变量名

    HOME : 代表使用者的家目录。cd ~ 去到使用者的家目录 或者利用 cd 就可以直接回到使用者家目录了。

     SHELL : 目前这个环境使用的 SHELL 是哪个程序? 如果是 bash 的话,预设是 /bin/bash

     PWD:用户当前工作目录的路径。它指出用户目前在Linux文件系统中处在什么位置。它是由Linux自动设置的

     HISTSIZE : 这个与“历史命令”有关,曾经下达过的指令可以被系统记录下来,而记录的“数目”则是由这个值来设定的。

     ENV : 这个使用者所使用的个性化环境设置文件的读取文件。

     MAIL : 当我们使用 mail 这个指令在收信时,系统会去读取的邮件信箱文件 (mailbox)。

     PATH : 就是执行文件搜寻的路径,目录与目录中间以冒号(:)分隔, 由于文件的搜寻是依序由 PATH 的变量内的目录来查询,所以,目录的顺序也是重要的喔。

     LANG : 语系文件,很多数据都会用到他,当出现编码错误的时候往往需
    要设置它,中文编码是zh_CN.UTF8

    让环境变量的修改在退出shell再次登录时仍有效,需要在相关配置文件中修改
    Bash的初始化文件有:/etc/profile、/.bash_profile、**/.bash_login、/.profile、**/.bashrc、/etc/bashrc

    /etc/profile 存放一些全局(共有)变量,不管哪个用户,登录时都会读取该文件。通常设置一些Shell变量PATH,USER,HOSTNAME和HISTSIZE等

     ~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.

     ~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.

     /etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取

    上述配置文件的作用
    1)登录Linux先启动系统配置文件/etc/profile,并从/etc/profile.d目录的配置文件中搜集shell的设置,为系统的每个用户设置环境信息。
    2)用户配置文件~/.bash_profile,每个用户专用于自己使用的shell信息,仅用户登录时执行一次!
    默认情况下,此文件通过脚本执行同目录下用户的
    .bashrc文件。
    3)~/.bashrc文件包含专用于用户bash shell的bash信息,登录及每次打开新的shell时都会执行。里面又会调用/etc/bashrc

    设置用户自己的环境变量
    在/home/user/.bash_profile中定义下句,会怎样?
    alias la=‘ls –a|grep “.*”’
    答:user下次再登陆,其shell会自动建立一个别名命令la,功能为查看当前目录下名字以.开头的文件。

     写在~/.bash_profile中,需重新登录才能有效。除非运行source .bash_profile使其立即有效。

     写在~/.bashrc中,则打开新的终端中就有效

    区别:bash_profile只在会话开始的时候读取一次,而bashrc则每次打开终端时都会读取

     按照传统,定义的变量如PATH放到.bash_profile中,而像别名函数等放在.bashrc中,但是.bash_profile先于.bashrc读取内容,也可全放入.bashrc中习惯用各自的配置文件,编辑不需要root权限

    内部变量
    内部变量是Linux所提供的一种特殊类型的变量,这类变量在程序中用来作出判断。在shell程序内这类变量的值是不能修改的。
    部分内部变量是:
    $# ——传送给shell程序的位置参数的数量

    $?——最后命令的完成码或者在shell程序内部执行的shell程序(返回值)。0表示没有错误,其他任何值表明有错误

    $0——shell程序的名称

    $@——调用shell程序时所传送的全部参数的单字符串,“参数1”“参数2”…形式保存的参数内部变量

    $* “参数1 参数2”…形式保存的参数

    $n 第n个参数

    $$ 本程序的PID

    使用shell预定义变量的脚本举例
    在这里插入图片描述

    位置参数及引用
    可以编写一个shell脚本,当从命令行或者从其他shell脚本中调用它的时候,这个脚本接收若干参数。这些选项是通过Linux作为位置参数(
    positional parameter)提供给shell程序的。在shell脚本中应有变量,接收实参,这类变量的名称很特别,分别是1,2,3,…,这类变量称
    为位置变量。位置参数1存放在位置变量1中,位置参数2存放位置变量2中,……,在程序中可以使用$1,$2,……来访问

    Shell中的特殊符号
    1、注释符#
    除了#!/bin/bash里的#特殊

    2、美元符 $
    变量符。与反斜杠转义符相反,使其后的普通字符作为变量名,如$a表示变量a的值。变量字符长度超过1个时,用{}括起来

    3、单引号
    被引起的字符全部做普通字符,即全部原样
    echo ‘my $SHELL’

    4、双引号
    引号内的内容,除$、转义符\、倒引号`这三个保留特殊功能,其他字符均做普通字符。

    5、倒引号(数字1键旁边的那个键)
    引号内的字符串当做shell命令行解释执行,得到的结果取代整个倒引号括起来的部分
    在这里插入图片描述
    6. 反斜线
    反斜线是转义字符,它能把特殊字符变成普通字符。在某个字符前面利用反斜杠(\)能够阻止shell把后面的字符解释为特殊字符。
    在这里插入图片描述
    注意:在单引号括起来的字符串中,反斜线也成为普通字符,而失去转义字符功能。

    7.获取字符串长度
    string=“abcd”
    echo ${#string} #输出 4

    8.提取子字符串
    以下实例从字符串第 2 个字符开始截取 4 个字符
    string=“runoob is a great site”
    echo ${string:1:4} # 输出 unoo

    展开全文
  • 1.shell中的变量 变量的定义:变量即在程序运行过程中它的值是允许改变的量 变量是用一串固定的字符来标示不固定的值的一种方法 变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script运行时可...
  • shell中的变量 一、变量的定义:变量即在程序运行过程中它的值时允许改变的量;  变量是用一串固定的字符来表示不固定的值的一种方法;  变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储...
  • awk中使用shell中的变量一: "'$var'"这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如:var="test"awk 'BEGIN{print "'$var'"}'这种写法其实际是双括号变为单括号的常量,传递给了awk.如果var中含空格,...
  • linux shell(二)shell 中的变量

    千次阅读 2014-04-15 20:49:13
    在shell中使用变量需要在变量名前边加上一个"$"字符,“$”作为shell脚本中的一个保留字,表示...在上一节中就说过,shell中的变量是没有类型区分的。本质上,变量中的值都是以字符串的形式保存的,在对变量的解释上
  • 变量就是给一串字符串起名字。这串字符串就是变量的值。 变量的定义使用“=”或者使用指示符“define”。 变量的展开是严格字符串替换。...Makefile 符号$有特殊含义(表示变量或者函数引用),在规...
  • Shell中的变量、变量的数值计算

    千次阅读 2019-02-12 14:39:36
    环境变量也可叫全局变量,可以在创建他们shell及派生出shell中使用(无需定义,直接可以使用,如:$UID) 相关命令: set :输出所有变量 env:只显示全局变量 declare:输出所有变量,函数,整数等 ...
  • 一、如何定义和引用shell中的变量?  变量定义:变量名=值  变量引用:$变量名
  • 一、什么是Shell?...一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统安装的shell,不同的shell可能支持命令语法是不相同 二、Shell脚本执行方式: 第一种:输入脚本绝对路径或相对路径
  • shell中的变量赋值

    万次阅读 2017-04-04 22:29:15
    shell脚本中通常要获取某个值,供脚本使用,这个值来自于其他的地方,今天我们来说一下,如何获取和计算。 ""(双引号)阻止Shell对大多数特殊字符进行解释,但$,`,"仍保持其特殊...变量赋值中的=两边不能有空格
  • Linux Shell中的变量-自定义变量

    千次阅读 2015-10-07 15:39:21
    note that :与其他编程语言不同,Bash中的变量没有数据类型的区别,变量中的值都是以字符串的形式保存的,如果要进行数值计算,需要进行特殊转换 Linux Shell下的变量按其使用目的可分为3种类型: 环境变量:...
  • Linux Shell中的变量-位置变量

    千次阅读 2015-10-07 15:15:27
    note that :与其他编程语言不同,Bash中的变量没有数据类型的区别,变量中的值都是以字符串的形式保存的,如果要进行数值计算,需要进行特殊转换 Linux Shell下的变量按其使用目的可分为3种类型: 环境变量:...
  • Linux Shell中的变量-环境变量

    千次阅读 2015-10-07 15:12:10
    note that :与其他编程语言不同,Bash中的变量没有数据类型的区别,变量中的值都是以字符串的形式保存的,如果要进行数值计算,需要进行特殊转换 Linux Shell下的变量按其使用目的可分为3种类型: 环境变量:用
  • Linux shell中的变量

    2014-01-07 22:41:25
    shell编程肯定避免不了变量的使用,shell中变量定义有如下规则: 1.变量名和变量内容以=连接(=两边不能有空格) myvar=hello 2.变量名必须是字母或者数字,数字不能是首字符 3.变量内容如果有空格,可以使用双引号...
  • Linux入门之shell中的变量与函数

    千次阅读 2019-06-11 20:32:06
    一、变量的定义 (1)变量即在程序运行过程中它的值是...(4)在shell中变量是不能永久保存在系统中的,必须在文件中声明。 二、变量种类和名称规范 1.变量的种类 环境变量:只在当前shell中生效,shell关闭后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,030
精华内容 7,612
关键字:

shell中的变量