2010年03月04日 星期四 16时38分05秒
在学习LFS 6.6 的第四章第3节(4.3. Adding the LFS User: http://www.linuxfromscratch.org/lfs/view/6.6/chapter04/addinguser.html )时,里面提到登录 shell 和非登录 shell 的概念,不太清楚它们的准确区别,故在 Ubuntu 9.04 下实验了一下。 Continue reading "交互式登录 shell 和交互式非登录 shell 的区别 ( login shell, non-login shell )"
标签:bash
9.2. Manipulating Strings
9.2. Manipulating Strings
1、String Length
expr "$string" : '.*'
3、Index这个表达式跟java的用法好像不同
expr index $string $substring
Numerical position in $string of first character in $substring that matches.
|
4?{string:position:length}负数参数的用法有点怪
Extracts $length characters of substring from $string at $position.
|
而且下面这段不懂:
|
5、Example 9-12. Emulating getopt其中的字符串处理不甚明了
|
6、awk处理函数不懂
|
7、9.2.2. Further Discussion进一步讨论的几个例子没看
英语疑问:
1、emulation, getopt
A simple emulation of getopt using substring extraction constructs.
9.1. Internal Variables
9.1. Internal Variables
1、不懂:
|
2、
|
3、
|
4、
|
5、
|
6、IFS是空格时,字符间的多个空格视为一个分隔符,第一个字符前面的空格会忽略不计。见例子ifs.sh。
|
运行结果:
|
7、$LINENO 不懂
|
8、$PIPESTATUS不懂,并且在本机上的执行结果与书中的不同
|
9、不懂
$PWD的:
|
10、不懂$SHELLOPTS的用法
|
11、$SHLVL的用法
|
12、$TMOUT的用法不懂,例子example9-2~9-4不懂
13、$UID,下面这段话的意思不懂
This is the current user's real id, even if she has temporarily assumed
another identity through su.
14、example9-7太复杂了,留在这里备忘
|
15、set命令的用法
|
16、$!的用法
书上的例子:
|
英语疑问:
1、subtleties, nuances
This requires learning their subtleties and nuances.
2、necessarily
$SHELL does not necessarily give the correct answer.
3、collation order, mishandled
$LC_COLLATE
Often set in the .bashrc or /etc/profile files, this variable controls
collation order in filename expansion and pattern matching. If mishandled,
LC_COLLATE can cause unexpected results in filename globbing.
4、revert, customary
To revert to the customary behavior of bracket matching, set LC_COLLATE to C by an export LC_COLLATE=C in /etc/profile and/or ~/.bashrc.
5、expedient
In a script, it may be expedient to temporarily add a directory to the path
in this way.
6、likewise
$SHELL, the name of the user's login shell, may be set from /
etc/passwd or in an "init" script, and it is likewise not a
Bash builtin.
8.2. Numerical Constants
8.2. Numerical Constants
1、Example 8-4. Representation of numerical constants
同C语言一样,字符也是整数。但是@和_代表是多少不知道?而且把它们转化为十进制的方法忘记了。
32 let "b64 = 64#@_"
33 echo "base-64 number = $b64" # 4031
34 # This notation only works for a limited range (2 - 64) of ASCII characters 35 # 10 digits + 26 lowercase characters + 26 uppercase characters + @ + _
36
37
38 echo
39
40 echo $((36#zz)) $((2#10101010)) $((16#AF16)) $((53#1aA))
41 # 1295 170 44822 3375
英语疑难: evaluates
A number with an embedded # evaluates as BASE#NUMBER (with range and notational restrictions).
8.1. Operators
Chapter 8. Operations and Related Topics
8.1. Operators
1、Example 8-1. Greatest common divisor最大公约数的算法不懂,里面的练习:判断命令行参数是否是整数不懂,记在这里。
2、发现一个问题,bash的算术操作符只能进行整数的运算,要进行其它的复杂点的运算:如开方、小数等怎么办呢?
3、Example 8-2. Using Arithmetic Operations
这个例子有不少地方不明白,记在这里以后进一步解决:
我知道 let "z = 2 + 3" 相当于 (( z = 2 + 3 )),根据:
|
1)、
|
2)、 20 n=$(($n + 1))
3)、
23 : $[ n = $n + 1 ]
24 # ":" necessary because otherwise Bash attempts
25 #+ to interpret "$[ n = $n + 1 ]" as a command.
26 # Works even if "n" was initialized as a string.
4)、
29 n=$[ $n + 1 ]
30 # Works even if "n" was initialized as a string.
31 #* Avoid this type of construct, since it is obsolete and
nonportable.
32 # Thanks, Stephane Chazelas.
5)、 44 : $(( n++ )) # : $(( ++n )) also works.
6)、 47 : $[ n++ ] # : $[ ++n ]] also works
4、bash不能处理浮点数:
|
5、
if [ $condition1 -a $condition2 ] 相当于 if [[ $condition1 && $condition2 ]]
,但是&&不能用在[...]结构中,这些有什么规律吗?真不好掌握啊。
6、Example 8-3. Compound Condition Tests Using && and ||
|
我不懂&&在6行和17行有什么区别?
7、不懂 $((...))的用法
|
英语疑问:
1、Modulo turns up surprisingly often in various numerical recipes.
2、erroneous
An operation that takes a variable outside these limits will give an erroneous result.
3、flip, relevant, fly
"Bit flipping" is more relevant to compiled languages, such
as C and C++, which run fast enough to permit its use on the fly.
4、miscellaneous operators
5、evaluated
All the operations are evaluated (with possible side effects), but only the last operation is returned.
7.4. Nested if/then Condition Tests 7.5. Testing Your Knowledge of Tests
7.4. Nested if/then Condition Tests
嵌套条件测试相当于复合条件测试中的 &&
7.5. Testing Your Knowledge of Tests
|
有2个问题:
1、在测试条件中多个测试条件(如上:-f -a -f)的组合规则和形式是怎么样的?
2、"netscape /usr/share/doc/HTML/index.html &"后面加一个&是什么意思?
另外,这章布置了习题,分析/etc/X11/xinit/xinitrc文件中的条件语句,这遍就略过习题了。下同。
英语疑问:
1、excerpt
This file contains quite a number of if/then tests, as the following excerpt shows.
2、failsafe, fallbacks
# failsafe settings. Although we should never get here
# (we provide fallbacks in Xclients as well) it can't hurt.
7.3. Other Comparison Operators
1、太复杂了,记不住的,有没有什么规则呀?
The == comparison operator behaves differently within a double-brackets test than within single brackets.
|
2、测试数值用[ "$a" -ne "$b" ],测试字符串用[ "$a" != "$b" ]。
3、Example 7-6. Testing whether a string is null通过几个例子反复说:测试字符串一定要用双引号把字符串变量括起来!从前面看,测试数值变量同样是把变量用双引号括起来的,这样,可以总结说,无论是数值变量和字符串变量都必须加双引号。
4、Example 7-7. zmore中测试文件类型的语句,不懂
|
5、复合比较:
1)、[[ condition1 && condition2 ]]相当于 [ "$exp1" -a "$exp2" ]
2)、在比较空字符串时,应该在有可能是空字符串的字符串前加上额外的字符,文中说:
|
英语疑问:
1、globbing
File globbing and word splitting take place.
2、Caution advised, however.
10 # Bash permits integer operations and comparisons on variables
11 #+ whose value consists of all-integer characters.
12 # Caution advised, however.
3、sealing wax, cabbages and kings
2 # str-test.sh: Testing null strings and unquoted strings,
3 #+ but not strings and sealing wax, not to mention cabbages and kings . . .
4、compound comparison
5、suffice:
As S.C. points out, in a compound test, even quoting the string variable
might not suffice.
6、the "x's" cancel out(上面5的2))
7.2. File test operators
1、example 7-4
不懂下面的代码,这不是纯bash的代码,那是什么代码?
|
2、一句有技巧的语句:
|
结构:
如果 (参数个数=0)返回值为真,就会继续执行:directorys=当前目录;执行成功它的exit状态为0,也是真,那么就会停止执行||(或);
如果 (参数个数=0)返回值为假,就不会执行 &&(与)了,但会执行||(或)。
3、example 7-4
[ -h "$element" -a ! -e "$element" ] ,预先知道这句的作用是找到破坏了的符号连接,但是这句的作用怎么来的不懂;
另外,[ - ]与邻近的字符之间必须有空格。
英语疑问:
1、sticky:
Commonly known as the "sticky bit," the save-text-mode flag is a special
type of file permission.
2、absent:
"not" -- reverses the sense of the tests above (returns true if condition
absent).
3、would:
but that wouldn't be pure bash, now would it.
7.1. Test Constructs
1、command &>filename redirects both the stdout and the stderr of command to
filename.
|
2、|
pipe. Passes the output of previous command to the input of the next one,
or to the shell. This is a method of chaining commands together.
|
3、这个嵌套结构有点怪,还有(())和[[]]的有什么区别?
它的结构是:
if ()
if()
then()
else()
endif
then()
endif
总觉得不如这样:
if ()
then
if()
then()
else()
endif
()
endif
· An if/then construct can contain nested comparisons and tests.
|
4、example 7-1
bash里面的测试命令真是多呀?test [] [[]] (()) let ... ,快昏了。
[0]和[1]和[-1]的测试结果都是true,不懂?
[ -n "$xyz" ] 里面的-n什么作用?(
[]就是test命令
在man test中查到如下:
[-n] STRING
the length of STRING is nonzero
)
|
5、[[]]比[]更加有用?
|
6、
Following an if, neither the test command nor the test brackets ( [ ] or
[[ ]] ) are strictly necessary.
例如:
|
|
7、(( 1 / 0 )) 2>/dev/null不懂?
|
8、英语疑问:
1)The (( ... )) and let ... constructs also return an exit status of 0 if the
arithmetic expressions they evaluate expand to a non-zero value.
2)This is in marked contrast to using the test and [ ] constructs previously discussed.
Chapter 6. Exit and Exit Status
Chapter 6. Exit and Exit Status
1、$? 是脚本中最后一个命令的退出状态。
2、!在起到否定的作用时,其后面需要一个空格,如! true
3、在!用在命令行中时,起到调动最近的历史命令的作用,例如,前面你执行过 man true,
当你执行!man时,就会调用man true.