Bash 基础
2015-06-11 22:18
323 查看
Bash介绍
Linux之父Linus对Bash的描述我下载了一个叫Bourne Shell的外壳程序,它是UNIX初始外壳程序之一,可以从互联网上免费下载。名字来源自一个难听的双关语:
编写该外壳程序的家伙叫Steven Bourne(同borne 读音一样,但后者有出身、忍受之意)。而这个程序的名字叫“Bourne Again Shell”(再次忍受或出生之意),或一般叫“BASH”(有重击的意思)。
Sha-Bang
在脚本的开头”#!”,后面接着的是解释器的路径,如果路径不对的话,额……则会提示”bad interpreter”。”#!”占用了脚本开头的两个字节的魔法数字,它是文件类型的特殊标记。
在解释器进行对这个脚本进行解释的时候,由于它本身是由#开头,所以会以注视的形式跳过。
#!/bin/rm # Nothing happen, except that this file will disappear. echo "this line will never print" exit 0
上面的bash脚本将非常的有意思:
-
sh test.shecho 还是会执行的,能够打印出相应的内容。
-
chmod u+x test.sh && ./test.sh则如注释一般,什么也不做,除了test.sh文件本身消失一样。
同时需要注意’#!’只有在第一行才有作用,其余行都无效的,相当于普通的注释。
常用符号
. 通配任意字符;source 运算符,不会启动一个子shell来运行,环境会受到run.sh影响。如果直接运行./run.sh 则会启动一个子shell来运行,对于run.sh中的变量和函数,不会影响当前的shell。* 表示0或多个前面的字符;乘法; ** 幂运算
? 表示0或1个前面的字符
\ 转义字符
/ 除法
| 位或运算
|| 逻辑或运算
[ ] 属于内置命令(]居然不是), 与test一个意思; 数组元素
[ [ ] ] 属于关键字,test的扩展,继承自ksh88,在此结构中将没有 文件扩展和单词分离 ,但是会发生 参数扩展和命令替换 。比上面的更加灵活,更加的通用。
{} 代码块.又被称为内部组.事实上,这个结构创建了一个匿名的函数.但是与函数不同的,在其中声明的变量,对于脚本其他部分的代码来说还是可见的; 此外大括号还有扩展作用:cat {file1,file2}\ :\ {A,B,C} 中间不能有空格(有的话需要转义)。
() 命令组,将作为一个子shell执行
(()) 结构扩展 并进行算术运算,计算出0值退出码为1,非0值的退出码为0
& 位与
&& 逻辑与
$ 变量替换;正则表达是表示结尾
$? 退出状态变量
${} 参数替换
$# 参数个数:从0开始
$*所有的位置参数,被作为一个单词. 这里与IFS有关系
$@与$*同义,但是每个参数都是一个独立的”“引用字串,这就意味着参数被完整地传递,并没有被解释和扩展.这也意味着,每个参数列表中的每个参数都被当成一个独立的。
$$ 进程pid
# 注释;参数替换;数制转换
! 取反,注意后面有一个空格。 在命令行下可以启动Bash的历史机制n
` ` 命令替换的一种,比$()更为通用。
, 命令依次顺序执行,将最后一个结果返回
<> & >> ascii码比较,管道
<< & <<< Here Document & Here String
” ” 弱引用,在”“中${}的变量还是会被替换的。
’ ’ 强引用,在”中的变量是不会被替换的。
= 变量在赋值时,=前后都不能有空格,否则1)空格在=在前,会被当作一个命令,后接一个=的参数。2)空格在后,=前面一个作为环境变量,后面为作为命令来执行。
; 命令分隔符
;; 终止case选项
: 空命令,始终返回真(0或true)
~($HOME) ~+($PWD) ~-($OLDPWD)
- 在需要一个文件名的地方,-重定向输出到 stdout(如在 tar 和 cf 命令中),或者从stdin 中接受输入,而不是从一个文件中接受输入.这是在管道中作为一个过滤器,来使用文件定位工具的一种办法.
变量和参数
变量初始化#!/bin/bash num=123 number=$num number= $num #=后面有空白 number =$num #=前面有空白 str="1 2 3 4 5" echo $str #变量替换 echo "$str" #Quoting a variable preserves whitespace. echo '$str' #变量不展开 echo "$uninitialized" #blank line uninitialized += 5 echo "$uninitialized" #5
结果详情如下,解释请看注释
./test.sh:行6: 123: 未找到命令
./test.sh:行7: number: 未找到命令
1 2 3 4 5
1 2 3 4 5
$str
5
特殊变量
local variables
在代码块中才能见到
environmental variables
每次当 shell 启动时,它都将创建自己的环境变量.更新或者添加新的环境变量,将导致 shell 更新它的环境,同时也会影响所有继承自这个环境的所有子进程
positional parameters
位置参数:$0, $1, $2…10,{11}
下面是关于位置参数以及shift的用法
#!/bin/bash #first arg echo "first arg is $0" #last arg echo "last arg is ${!#}" #shift for p in "$@" do echo -n "$1 " shift done echo echo -n "after shifts: " #default value echo ${1:-"\$1 is NULL"}
结果
[wingo-zhang@localhost Temp]$ ./test.sh 1 2 3 4 5
first arg is ./test.sh
last arg is 5
1 2 3 4 5
after shifts: $1 is NULL
这里主要记录以下,Linux Shell 基本的入门知识。如背景知识,常用的符号以及一些变量的用法。对于一些基本语句,就没怎么说明了。
常用的语句,如条件语句,循环语句等。
相关文章推荐
- Korn Shell(简称ksh)
- C-Shelll(简称csh)
- Bourne Shell(简称sh)
- Bourne Again Shell (简称bash)
- shell统计代码行数
- 1个Makefile简单例子
- 三白话经典算法系列 Shell排序实现
- 对nginx的日志进行分割的shell脚本
- Linux-shell下的作业管理
- heap-adb shell查看堆栈使用
- 用Xshell连接Linux系统时输入反斜杠成W
- Shell逻辑比较符
- Shell操作符--加减乘除
- Shell脚本之let,echo变量
- Shell语句之sleep语句
- Shell学习参考网址
- Shell脚本运行
- Shell脚本sed命令
- Shell脚本常用unix命令
- Bash Shell 的管道命令