8455澳门新_8455新葡萄娱乐【官网】

8455澳门新:通常你会需要在

shell中的变量

变量

        运行SHELL脚本中的单个命令自然有用,但这有其自身的限制。通常你会需要在SHELL命令使用其他数据来处理信息。这可以通过变量来实现。变量允许你临时性地将信息存储在SHELL脚本中,以便和脚本中的其他命令一起使用。

变量的类型

declare –a name :表示数组array。

declare –f name :表示是function的名字。

declare –F name :同上,但只显示function的名字。

declare –i name :表示整数

readonly name=value

declare –r name=value :表示只读。不能使用unset。对于只读变量,也可以使用readonly name 的方式,相当于declare –r name 。readonly可以带三个选项:-f表示这是个function的名字,-p表示打印所有的readonly的名字,-a表示这是个只读的数组。

declare –x name :同export,即不仅在当前的环境中起作用,也在子shell环境中起作用。

1 环境变量

变量的使用

  1. 设定变量(注意等号两端要紧跟,不能有空格):使用=号

2. 取得变量的值:在变量前加$,如果有其他干扰的情况,可以使用${},将变量名称括起来

  1. 取消变量:unset后跟变量名称或者函数名称

  2. 清空变量:赋值时,等号后边为空白就行。

  3. 设置变量为环境变量:使用export后跟变量名。这样子shell就可以使用了。

注意:

双引号中:进行如下三个操作:替换变量、替换命令执行结果、替换算术运算结果。抑制在双引号中替换变量,可以使用转义$。

 

单引号:形成一个所见所得的字符串,不会进行任何的变量操作。

echo "my first linux shell!"
first_name=Jackie
last_name=King
echo your name is: $first_name·$last_name

SHELL维护着一组环境变量,用了记录特点的系统信息。比如系统的名称、登录到系统上的用户名、用户的默认家目录以及SHELL查找程序的搜索路径。可以用set命令来显示一份完整的当前环境变量。

数组

  1. 建立数组

可以直接创建数组:A[0]=5; A[4]=10; A[3]="bash shell" #下标可以跳跃,可以直接增加元素。没有定义下标的位置是没有元素的,此时A有3个元素。

可以通过列表创建:B=(23 88 99 66)

指定个别元素索引:C=([3]=77 [1]=100 [5]=66) 

  1. 访问数组

访问单个数组:echo ${B[2]}

得到空格隔开的所有元素:${B[@]} 

得到空格隔开的字符串:${B[*]}

元素个数:echo ${#B[@]} 

[root@local data]# set |head -30

字符串操作 (可以使用正则表达式)

 

运算符号 代表意义

${#string}

$string的长度

 

 

${string:position}

在$string中, 从位置$position开始提取子串

${string:position:length}

在$string中, 从位置$position开始提取长度为$length的子串

 

 

${string#substring}

从变量$string的开头, 删除最短匹配$substring的子串

${string##substring}

从变量$string的开头, 删除最长匹配$substring的子串

${string%substring}

从变量$string的结尾, 删除最短匹配$substring的子串

${string%%substring}

从变量$string的结尾, 删除最长匹配$substring的子串

 

 

${string/substring/replacement}

使用$replacement, 来代替第一个匹配的$substring

${string//substring/replacement}

使用$replacement, 代替所有匹配的$substring

${string/#substring/replacement}

如果$string的前缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

${string/%substring/replacement}

如果$string的后缀匹配$substring, 那么就用$replacement来代替匹配到的$substring

ABRT_DEBUG_LOG=/dev/null

预定义变量

  1. 环境变量

BASH:Bash的完整路径名。
BASH_VERSION
HOME
HOSTNAME:主机名
HOSTTYPE:主机形态。例如i386.
IFS:定义字段分隔符。默认值为:空格符、tab字符、换行字符(newline)
LANG:目前语系(locale)的名称。
PATH:命令的搜索路径。如果要自行添加搜索路径,一般的做法为:export PATH=/root/bin/:$PATH。这样可以在PATH增加路径/root/bin。
PS1:主要提示符号。
SHELL:shell的文件路径。默认为'/bin/bash'。
UID:用户代码

  1. 输入的参数

输入参数的个数:$#

输入参数的数组:$*

输入参数的数组:$@

(以上两个不同只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 "$*" 等价于 "1 2 3"(传递了一个参数),而 "$@" 等价于 "1" "2" "3"(传递了三个参数)

每一个输入参数:$0 $1 $2 $3...$[10] $[11]...,其中$0表示可执行文件路径

#!/bin/bash
# 预定义变量

echo parameter amount: $#
echo all parameter: $*
for((i=0;i<=$#;i++))
do
    eval echo "parameter $i: $"$i
done
  1. 执行状态

命令的执行状态:$?

当前shell的PID:$$

后台进程的PID:$!

#!/bin/bash

echo execute echo
# return 为0表示正常返回
echo last return: $?
# 后台进程
echo current process ID: $$ &
echo last background process ID in this shell: $!

参数置换

name=${name2:-word}
当name2这个变量已经设置过了(就是说name2这个变量设置过值),则把它的值赋值给name。如果name2这个变量没有设置过值,则把word当作name的值。

name=${name2:=word}
当name2这个变量已经设置过了,就把name2的值赋值给name这个变量,如果name2没有设置过,则把word赋值给name2

name=${name2:?word}
当name2这个变量设置过了,就把name2的值赋值给name,如果没有设置过值,则打印出word,但并不把值赋值给name

name=${name2:+word}
当name2这个变量有值,则把word的值赋给name,如果name2没有值,则什么都不设置。

BASH=/bin/bash

函数

BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath

脚本中的函数

函数定义方式

[ function ] funname ()
{
    action;
    [return int;]
}

说明:

  1. 可以带function fun()  定义,也可以直接fun() 定义,不带任何参数。
  2. 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

    #!/bin/bash function output() {

    echo this is output $1
    return 4;
    

    } output "12345" echo $?

BASH_ALIASES=()

shell中载入函数

当你收集一些经常使用的函数时,可以将之放入函数文件中并将文件载入shell。

有函数文件test.main

function findit(){
    if [ $# -lt 1 ]; then
        echo "usage: findit file"
        return 1
    fi
    find / -name $1 -print
}

载入(定位文件):

#点+空格+函数路径
. ~/test.main

删除:

unset

 

BASH_ARGC=()

调试脚本

脚本错误一般有:循环错误、漏写引号、比较测试的错误、字符大小写。

最常用的调试是使用echo输出

BASH_ARGV=()

set命令

set命令可辅助脚本调试。以下是set命令常用的调试选项:

  • set -n 读命令但并不执行。
  • set -v 显示读取的所有行。
  • set -x 显示所有命令及其参数。

使用set命令可以看出每一次执行的命令。

BASH_CMDS=()

BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d

[. . . ]

在脚本中,你可以在环境变量名称前加上美元符 $ 来使用这些环境变量。

例如:

[root@local data]# echo $HOME
                /root

2 用户变量8455澳门新,

        处理环境变量,SHELL脚本中还允许在脚本中定义和使用自己的变量。定义变量允许临时存储数据并在整个脚本中使用,从而使SHELL脚本看起来更像一个真正的程序。

        用户变量定义规则:可以用字母、数字、下划线组成的文本字符串。长度不超过20个。用户变量区分大小写。

        使用等号将赋值给用户变量。注意:在变量、等号和值之间不能出现空格。

例如:var1=10,MYNAME=xiaoming

        (1)SHELL会自动决定变量值得数据类型。在脚本的整个生命周期中,SHELL 脚本中定义的变量会一直保持着它们的值,但在SHELL结束时会被删除。

        (2)变量每次被引用时,都会输出当前赋给它的值。引用一个变量是需要使用美元符"$",二引用变量来对其进行赋值时则不要使用美元符。

3 只读变量

本文由8455澳门新发布于每日更新,转载请注明出处:8455澳门新:通常你会需要在

相关阅读