- 浏览: 572214 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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 1014修改 /etc/sysconfig/network 里面的主机 ... -
Linux文件查找命令find,xargs详述
2011-11-18 10:55 1134目录 版权声明前言:关于find命令一、find 命令格 ... -
Linux 查看CPU信息、机器型号等硬件信息
2011-11-02 08:44 1022原文出处:http://www.51testing.com/? ... -
linux内存cached释放
2011-10-17 17:37 1755我们用free命令查看系统 ... -
Too many open files 问题的解决
2011-10-13 10:54 2698在/etc/security/limits.conf文件中设置 ... -
Linux下tar命令详解
2011-09-28 17:56 926tar [-cxtzjvfpPN] 文件与 ... -
Linux文件分割与合并:split&cat
2011-09-22 16:58 1381Linux下文件分割可以通过split命令来实现,而用c ... -
双网卡绑定与端口聚合
2011-09-22 15:21 5671关于双网卡绑定与端口聚合 端口聚合(IEE ... -
linux修改ip地址
2011-09-06 11:02 839vim /etc/sysconfig/networking/d ... -
Ubuntu下Java6中文乱码的问题
2011-07-25 09:06 1465安装完JRE6并运行程序,界面有些汉字会显示成方框。 方法就是 ... -
linux基础之教你如何查看linux版本
2011-06-01 16:09 1319如何得知自己正在使用的linux是什么版本呢,下面的几种方法将 ... -
SSH Secure Shell Client中文乱码的解决办法
2011-05-30 16:27 1069说这是SSH Secure Shell Client多年未解决 ... -
如何用Shell脚本修改crontab
2011-05-08 09:42 3614crontab -l > /tmp/crontab.ba ... -
ubuntu 启动后一直出现 正在启动file manager的解决方案
2011-04-03 03:13 1815出现这种状况,一般是nautilus出现问题,但系统的其他 ... -
Ubuntu 重启网络 命令
2010-12-24 14:51 3438Ubuntu的重启网络命令是:sudo /etc/rc. ... -
Ubuntu下修改IP地址
2010-12-14 10:18 1382未修改过的/etc/network/interfaces# T ... -
linux ubuntu 挂载 虚拟 光驱 iso文件
2010-12-13 17:00 3379完整命令: sudo mount -t iso9660 -o ... -
25 条 SSH 命令和技巧
2010-11-29 08:35 1439SSH是一个非常伟大的工具,如果你要在互联网上远程连接到服 ... -
一个神奇的linux命令...删除指定天数前创建的文件
2010-11-25 14:45 1467由于服务器存的东西太多,需要经常把一个数据的临时文件夹删掉一部 ... -
Linux下查看服务器负载性能命令
2010-11-25 07:36 1888做压力测试的时候想看看Linux服务器当前负载如何,性 ...
相关推荐
主要内容: .shell基础 基本介绍,环境,选项,特殊字符 .shell变量 用户定义变量,环境变量,位置变量(shell 参数) .shell script编程 条件测试,循环及重复控制
Shell变量名使用的特殊字符: $# 传送给命令Shell的参数序号 $- 在Shell启动或使用set命令时提供选项 $? 上一条命令执行后返回的值 $$ 当前shell的进程号 $! 上一个子进程的进程号 $@ 所有的参数,每个都用双...
详细介绍了shell基础之环境变量 位置参数变量 预定义变量,并附有例子详细演示截图。适合初学者。
其中用户变量在编程过程中使用最多,系统变量在对参数判断和命令返回值判断会使用,环境变量主要是在程序运行的时候需要设置。 1 系统变量 Shell常用的系统变量并不多,但却十分有用,特别是在做一些参数检测的时候...
特殊参数变量: $#:传给Shell脚本的参数个数 $0:当前Shell脚本名 $1:传递给Shell脚本的第1个参数,若没有则为空 $2:传递给Shell脚本的第2个参数,若没有则为空 $3:传递给Shell脚本的第3个参数,后续以此类推 ${...
shell的特殊变量实例详解 shell的特殊变量实例详解shell的特殊变量实例详解 $0 shell或shell脚本的名字 $* 以一对双引号给出参数列表 $@ 将各个参数分别加双引号返回 $# 参数的个数 $_ 代表上一个命令...
shell命令调用kettle,将生成的日志按月打包,并运行前一天的数据,并且参数传递冲抵kettle中的变量
解决Unity不能调用shell脚本传递参数的问题
shell脚本中一些参数和变量的认识.docx
Linux系统中shell变量有4种类型:用户自定义变量,由用户自己定义、修改和使用;环境变量,由系统维护,用于设置用户的shell工作环境,只有极少数的变量可以修改;预定义变量,bash预定义的特殊变量,不能直接修改;...
此链接通往 Bash Shell 编程学习的目录导航 ,从入门到放弃,感兴趣的可以去看看: 当你在脚本中写入位置变量的时候,如果忘记在执行脚本后面跟上 参数的时候, 会报错又麻烦,那么如何让脚本提醒用户添加位置...
第一节 Linux系统概述 一、Linux简介 二、Linux系统的特点 三、Linux系统的组成 第二节 Linux系统的使用 Linux文件系统的概念 Linux的标准目录和文件 文件保护的概念 ...七、参数变量和内部变量
bash shell提供了命令行参数添加在命令后面的数据值)、命令行选项修改命令行为的单字符值)和直接读取键盘输入。 1、命令行参数向shell脚本传递数据的最基本方式是使用命令行参数。 1)读取参数读取输入的参数的...
主要介绍了Shell脚本中判断输入变量或者参数是否为空的方法,本文总结了5种方法,并分别给出了代码实例,需要的朋友可以参考下
unset命令用于删除已定义的shell变量(包括环境变量)和shell函数。unset命令不能够删除具有只读属性的shell变量和环境变量。 语法格式:unset[参数] 常用参数: -f 仅删除函数 -v 仅删除变量 参考...
1.Shell变量的定义及其使用。 2.位置参数和环境变量。 3.Shell中的特殊字符。 4.条件判断结构与循环结构 5.函数的定义和使用 三、预备知识 1、LINUX环境下常用命令和VI编辑器的操作。 2、了解Shell作用和主要分类等...
而shell 脚本参数作为变量传递给SQL以及SQL脚本也是DBA经常碰到的情形之一。本文主要讨论了如何将shell脚本的参数传递到SQL脚本之中并执行SQL查询。 有关shell与SQL之间的变量传递,请参考:Linux/Unix shell ...
NULL 博文链接:https://justcoding.iteye.com/blog/1941715
Shell是Linux的外壳,是Linux的用户界面, Shell为用户提供了输入命令和参数并可得到命令执行结果的环境。用户对Shell理解越深刻, Shell对用户工作的支持就越有力。...shell变量 流程控制 子程序
Linux运维-3.Shell编程-11shell基础-113位置参数变量1.avi