- 浏览: 581140 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
maleking:
太感谢了。新手搭建hadoop集群环境,dat ...
启动hadoop后没有datanodes的问题 -
system_mush:
NoClassDefFoundError: com/google/common/collect/Maps -
di1984HIT:
呵呵,我学习一下。
Katta源码分析 -
di1984HIT:
呵呵, 不管怎么说,挺好的。
zookeeper3.3学习笔记2:配置参数介绍 -
zoezhang:
谢谢了,可以解决
maven2报cannot be cast to javax.servlet.Filter错误解决
变量和参数
部分引用[双引号, 即"]. "STRING"将会阻止(解释)STRING中大部分特殊的字符.
1 COMMAND $variable2 $variable2 $variable2 # COMMAND将不带参数执行.
2 COMMAND "$variable2" "$variable2" "$variable2" # COMMAND将以3个空参数来执行.
3 COMMAND "$variable2 $variable2 $variable2" # COMMAND将以1个参数来执行(2空格)
全引用[单引号, 即’]. ’STRING’将会阻止STRING中所有特殊字符的解释. 这是一种比使用"更强烈的形
单引号(’ ’)操作与双引号基本一样, 但是不允许引用变量, 因为$的特殊意义被关闭了. 在单引号中, 任何特殊字符都按照字面的意思进行解释, 除了’. 所以说单引号("全引用")是一种比双引号("部分引用")更严格的引用方法
比较操作符在双中括号对和单中括号对中的行为是不同的. 1 [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么结果将为真
2 [[ $a == "z*" ]] # 如果$a与z*相等(就是字面意思完全一样), 那么结果为真.
3
4 [ $a == z* ] # 文件扩展匹配(file globbing)和单词分割有效.
5 [ "$a" == "z*" ] # 如果$a与z*相等(就是字面意思完全一样), 那么结果为真.
6
$*, $@
位置参数.
$?
退出状态码变量. $? 变量 保存了一个命令, 一个函数, 或者是脚本本身的退出状态码.
$$
进程ID变量. 这个$$ 变量 保存了它所在脚本的进程 ID [1]
()
命令组. 1 (a=hello; echo $a)
$0, $1, $2, 等等.
位置参数, 从命令行传递到脚本, 或者传递给函数, 或者set给变量(参见例子 4-5和例子 11-15)
$#
命令行参数 [2] 或者位置参数的个数(参见例子 33-2)
$*
所有的位置参数都被看作为一个单词.
"$*"必须被引用起来.
$@
与$*相同, 但是每个参数都是一个独立的引用字符串, 这就意味着, 参数是被完整传递的, 并没有被解释或扩展. 这也意味着, 参数列表中每个参数都被看作为单独的单词.
当然, "$@"应该被引用起来.
--------------------------------------------------------------------------------
例子 Array-6. arglist: 通过$*和$@列出所有的参数
1 #!/bin/bash
2 # arglist.sh
3 # 多使用几个参数来调用这个脚本, 比如"one two three".
4
5 E_BADARGS=65
6
7 if [ ! -n "$1" ]
8 then
Array echo "Usage: `basename $0` argument1 argument2 etc."
10 exit $E_BADARGS
11 fi
12
13 echo
14
15 index=1 # 起始计数.
16
17 echo "Listing args with \"\$*\":"
18 for arg in "$*" # 如果"$*"不被""引用,那么将不能正常地工作.
1Array do
20 echo "Arg #$index = $arg"
21 let "index+=1"
22 done # $* 将所有的参数看成一个单词.
23 echo "Entire arg list seen as single word."
24
25 echo
26
27 index=1 # 重置计数(译者注: 从1开始).
28 # 如果你写这句会发生什么?
2Array
30 echo "Listing args with \"\$@\":"
31 for arg in "$@"
32 do
33 echo "Arg #$index = $arg"
34 let "index+=1"
35 done # $@ 把每个参数都看成是单独的单词.
36 echo "Arg list seen as separate words."
37
38 echo
3Array
40 index=1 # 重置计数(译者注: 从1开始).
41
42 echo "Listing args with \$* (unquoted):"
43 for arg in $*
44 do
45 echo "Arg #$index = $arg"
46 let "index+=1"
47 done # 未引用的$*将会把参数看成单独的单词.
48 echo "Arg list seen as separate words."
4Array
50 exit 0
--------------------------------------------------------------------------------
shift命令执行以后, $@将会保存命令行中剩余的参数, 但是没有之前的$1, 因为被丢弃了. 1 #!/bin/bash
2 # 使用 ./scriptname 1 2 3 4 5 来调用这个脚本
3
4 echo "$@" # 1 2 3 4 5
5 shift
6 echo "$@" # 2 3 4 5
7 shift
8 echo "$@" # 3 4 5
Array
10 # 每次"shift"都会丢弃$1.
11 # "$@" 将包含剩下的参数.
$@也可以作为工具使用, 用来过滤传递给脚本的输入. cat "$@"结构既可以接受从stdin传递给脚本的输入, 也可以接受从参数中指定的文件中传递给脚本的输入. 参见例子 12-21和例子 12-22 .
$*和$@中的参数有时候会表现出不一致而且令人迷惑的行为, 这都依赖于$IFS的设置.
--------------------------------------------------------------------------------
例子 Array-7. $*和$@的不一致的行为
1 #!/bin/bash
2
3 # 内部Bash变量"$*"和"$@"的古怪行为,
4 #+ 都依赖于它们是否被双引号引用起来.
5 # 单词拆分与换行的不一致的处理.
6
7
8 set -- "First one" "second" "third:one" "" "Fifth: :one"
Array # 设置这个脚本的参数, $1, $2, 等等.
10
11 echo
12
13 echo ’IFS unchanged, using "$*"’
14 c=0
15 for i in "$*" # 引用起来
16 do echo "$((c+=1)): [$i]" # 这行在下边每个例子中都一样.
17 # 打印参数.
18 done
1Array echo ---
20
21 echo ’IFS unchanged, using $*’
22 c=0
23 for i in $* # 未引用
24 do echo "$((c+=1)): [$i]"
25 done
26 echo ---
27
28 echo ’IFS unchanged, using "
[email=$@"’]$@"’[/email]
2Array c=0
30 for i in "$@"
31 do echo "$((c+=1)): [$i]"
32 done
33 echo ---
34
35 echo ’IFS unchanged, using
[email=$@’]$@’[/email]
36 c=0
37 for i in $@
38 do echo "$((c+=1)): [$i]"
3Array done
40 echo ---
41
42 IFS=:
43 echo ’IFS=":", using "$*"’
44 c=0
45 for i in "$*"
46 do echo "$((c+=1)): [$i]"
47 done
48 echo ---
4Array
50 echo ’IFS=":", using $*’
51 c=0
52 for i in $*
53 do echo "$((c+=1)): [$i]"
54 done
55 echo ---
56
57 var=$*
58 echo ’IFS=":", using "$var" (var=$*)’
5Array c=0
60 for i in "$var"
61 do echo "$((c+=1)): [$i]"
62 done
63 echo ---
64
65 echo ’IFS=":", using $var (var=$*)’
66 c=0
67 for i in $var
68 do echo "$((c+=1)): [$i]"
6Array done
70 echo ---
71
72 var="$*"
73 echo ’IFS=":", using $var (var="$*")’
74 c=0
75 for i in $var
76 do echo "$((c+=1)): [$i]"
77 done
78 echo ---
7Array
80 echo ’IFS=":", using "$var" (var="$*")’
81 c=0
82 for i in "$var"
83 do echo "$((c+=1)): [$i]"
84 done
85 echo ---
86
87 echo ’IFS=":", using "
[email=$@"’]$@"’[/email]
88 c=0
8Array for i in "$@"
Array0 do echo "$((c+=1)): [$i]"
Array1 done
Array2 echo ---
Array3
Array4 echo ’IFS=":", using
[email=$@’]$@’[/email]
Array5 c=0
Array6 for i in $@
Array7 do echo "$((c+=1)): [$i]"
Array8 done
ArrayArray echo ---
100
101 var=$@
102 echo ’IFS=":", using $var (
[email=var=$@)’]var=$@)’[/email]
103 c=0
104 for i in $var
105 do echo "$((c+=1)): [$i]"
106 done
107 echo ---
108
10Array echo ’IFS=":", using "$var" (
[email=var=$@)’]var=$@)’[/email]
110 c=0
111 for i in "$var"
112 do echo "$((c+=1)): [$i]"
113 done
114 echo ---
115
116 var="$@"
117 echo ’IFS=":", using "$var" (var="
[email=$@")’]$@")’[/email]
118 c=0
11Array for i in "$var"
120 do echo "$((c+=1)): [$i]"
121 done
122 echo ---
123
124 echo ’IFS=":", using $var (var="
[email=$@")’]$@")’[/email]
125 c=0
126 for i in $var
127 do echo "$((c+=1)): [$i]"
128 done
12Array
130 echo
131
132 # 使用ksh或者zsh -y来试试这个脚本.
133
134 exit 0
135
136 # 这个例子脚本是由Stephane Chazelas所编写,
137 # 并且本书作者做了轻微改动.
--------------------------------------------------------------------------------
$@与$*中的参数只有在被双引号引用起来的时候才会不同.
--------------------------------------------------------------------------------
例子 Array-8. 当$IFS为空时的$*和$@
1 #!/bin/bash
2
3 # 如果$IFS被设置, 但其值为空,
4 #+ 那么"$*"和"$@"将不会像期望的那样显示位置参数.
5
6 mecho () # 打印位置参数.
7 {
8 echo "$1,$2,$3";
Array }
10
11
12 IFS="" # 设置了, 但值为空.
13 set a b c # 位置参数.
14
15 mecho "$*" # abc,,
16 mecho $* # a,b,c
17
18 mecho $@ # a,b,c
1Array mecho "$@" # a,b,c
20
21 # 当$IFS值为空时, $*和$@的行为依赖于
22 #+ 正在运行的Bash或者sh的版本.
23 # 因此在脚本中使用这种"特性"是不明智的.
24
25
26 # 感谢, Stephane Chazelas.
27
28 exit 0
发表评论
-
Linux 修改主机名字
2011-12-16 15:24 1046修改 /etc/sysconfig/network 里面的主机 ... -
Linux文件查找命令find,xargs详述
2011-11-18 10:55 1153目录 版权声明前言:关于find命令一、find 命令格 ... -
Linux 查看CPU信息、机器型号等硬件信息
2011-11-02 08:44 1046原文出处:http://www.51testing.com/? ... -
linux内存cached释放
2011-10-17 17:37 1785我们用free命令查看系统 ... -
Too many open files 问题的解决
2011-10-13 10:54 2746在/etc/security/limits.conf文件中设置 ... -
Linux下tar命令详解
2011-09-28 17:56 955tar [-cxtzjvfpPN] 文件与 ... -
Linux文件分割与合并:split&cat
2011-09-22 16:58 1419Linux下文件分割可以通过split命令来实现,而用c ... -
双网卡绑定与端口聚合
2011-09-22 15:21 5707关于双网卡绑定与端口聚合 端口聚合(IEE ... -
linux修改ip地址
2011-09-06 11:02 860vim /etc/sysconfig/networking/d ... -
Ubuntu下Java6中文乱码的问题
2011-07-25 09:06 1492安装完JRE6并运行程序,界面有些汉字会显示成方框。 方法就是 ... -
linux基础之教你如何查看linux版本
2011-06-01 16:09 1346如何得知自己正在使用的linux是什么版本呢,下面的几种方法将 ... -
SSH Secure Shell Client中文乱码的解决办法
2011-05-30 16:27 1103说这是SSH Secure Shell Client多年未解决 ... -
如何用Shell脚本修改crontab
2011-05-08 09:42 3654crontab -l > /tmp/crontab.ba ... -
ubuntu 启动后一直出现 正在启动file manager的解决方案
2011-04-03 03:13 1847出现这种状况,一般是nautilus出现问题,但系统的其他 ... -
Ubuntu 重启网络 命令
2010-12-24 14:51 3474Ubuntu的重启网络命令是:sudo /etc/rc. ... -
Ubuntu下修改IP地址
2010-12-14 10:18 1421未修改过的/etc/network/interfaces# T ... -
linux ubuntu 挂载 虚拟 光驱 iso文件
2010-12-13 17:00 3413完整命令: sudo mount -t iso9660 -o ... -
25 条 SSH 命令和技巧
2010-11-29 08:35 1464SSH是一个非常伟大的工具,如果你要在互联网上远程连接到服 ... -
一个神奇的linux命令...删除指定天数前创建的文件
2010-11-25 14:45 1488由于服务器存的东西太多,需要经常把一个数据的临时文件夹删掉一部 ... -
Linux下查看服务器负载性能命令
2010-11-25 07:36 1910做压力测试的时候想看看Linux服务器当前负载如何,性 ...
相关推荐
在Linux中,shell变量主要分为两大类:本地变量和环境变量。除此之外,还存在另外两种特殊变量,它们是只读的,并且主要用作向shell脚本传递参数。 本地变量仅在创建它们的shell生命期内有效,也就是说,它们只在...
#### 一、Shell变量概述 Shell变量是Shell脚本编程的基础之一,用于存储数据。在Shell脚本环境中,变量没有类型之分,它们只能存储文本字符,系统不会自动识别为其他类型(如数字、布尔值等)。在定义变量时,变量...
通过理解并熟练掌握这些Shell变量和概念,初学者能够更有效地编写和调试Shell脚本,提高自动化任务的效率。记得在实际应用中,适时地设置环境变量可以使脚本更具通用性,而位置参数变量则能帮助我们灵活处理用户输入...
Shell变量是编程的核心部分,包括用户定义变量、环境变量和位置变量(shell参数)。用户定义变量由`$`符号后跟变量名来引用,例如`myvar=value`。环境变量是可供子进程使用的全局变量,如`HOME`表示用户的主目录,`...
使用不加任何参数的 set 命令显示所有本地定义的 shell 变量。set 输出可能很长。 结合变量值 将变量并排可以使变量结合在一起:echo $var_1$var_2 测试变量是否已经设置 有时要测试是否已设置或初始化变量。...
Linux Shell 变量详解 Linux Shell 变量是 Linux 命令行中非常重要的一部分,它们...预定义 Shell 变量和用户定义变量都是 Linux Shell 变量的重要组成部分。通过使用 Shell 变量,可以更方便地执行任务和管理系统。
Shell变量名使用的特殊字符: $# 传送给命令Shell的参数序号 $- 在Shell启动或使用set命令时提供选项 $? 上一条命令执行后返回的值 $$ 当前shell的进程号 $! 上一个子进程的进程号 $@ 所有的参数,每个都用双...
### 工作笔记:Shell 变量和运算符 在 Linux 和 Unix 系统中,shell 脚本是一种强大的工具,它可以帮助我们自动化日常任务、处理系统管理和数据操作等。本文将详细介绍 shell 变量和运算符的相关知识点,帮助读者更...
本文将对 Shell 变量进行详细的介绍,包括什么是 Shell 变量、如何使用本地变量和环境变量、变量的设置、显示和清除方法等。 1. 什么是 Shell 变量? Shell 变量是存储设备中的一些可读写的存储单元。变量可以定制...
### Linux实验六 Shell变量知识点详解 #### 一、实验目的 1. **熟悉Shell变量**: - Shell变量是Shell编程中的基本概念之一,用于存储数据。这些数据可以是文件名、数字或文本字符串。 - 变量分为两种类型:用户...
Shell特殊变量在Linux和Unix系统中的使用是shell脚本编程中的关键组成部分,它们提供了一种方式来访问和处理脚本运行时的环境信息。这些变量不是由用户直接赋值的,而是由shell自动创建和维护的,具有特殊的含义和...
然而,在调用shell脚本时,如果需要传递参数,则需要注意参数的格式和命令行的构建方式,否则容易导致参数无法正确传递的情况。 #### 问题描述 根据题目中的描述,我们遇到的问题是:Unity不能正确地调用shell脚本...
其中用户变量在编程过程中使用最多,系统变量在对参数判断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置。 1 系统变量 Shell常用的系统变量并不多,但却十分有用,特别是在做一些参数检测的时候...
### 练习Shell变量、重定向、管道等相关命令 在Linux和Unix系统中,Shell脚本是一种非常强大的工具,用于自动化任务处理、系统管理和数据处理等。熟练掌握Shell中的变量、重定向和管道操作对于提高工作效率至关重要...
shell变量及控制结构1 在 Linux 中,shell 变量是非常重要的概念,它们可以存储和表示不同的值,从而影响着 shell 脚本的执行。在本节中,我们将讨论 shell 变量的使用方法和控制结构的应用。 1. 变量的使用 在 ...
了解Shell变量和参数是编写脚本的关键。变量用于存储数据,如PATH表示可执行文件的搜索路径,$1、$2等表示脚本接收到的参数。此外,环境变量(export定义的变量)是所有子进程都能访问的,而局部变量仅在当前Shell...
以下是关于Shell变量的一些关键知识点: 1. **变量命名规则**: - 变量名称允许由字母、数字和下划线组成,但不能以数字开头。 - 变量的默认类型是字符串,这意味着即使赋值为数字,它也会被视为文本。 - 赋值时...
shell命令调用kettle,将生成的日志按月打包,并运行前一天的数据,并且参数传递冲抵kettle中的变量