Bash 基础
来源:互联网 发布:魔法王座神翼升阶数据 编辑:程序博客网 时间:2024/06/05 09:50
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.sh
echo 还是会执行的,能够打印出相应的内容。
- 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/bashnum=123number=$numnumber= $num #=后面有空白number =$num #=前面有空白str="1 2 3 4 5"echo $str #变量替换echo "$str" #Quoting a variable preserves whitespace.echo '$str' #变量不展开echo "$uninitialized" #blank lineuninitialized += 5echo "$uninitialized" #5
结果详情如下,解释请看注释
./test.sh:行6: 123: 未找到命令
./test.sh:行7: number: 未找到命令
1 2 3 4 5
1 2 3 4 5
$str5
- 特殊变量
- local variables
在代码块中才能见到 - environmental variables
每次当 shell 启动时,它都将创建自己的环境变量.更新或者添加新的环境变量,将导致 shell 更新它的环境,同时也会影响所有继承自这个环境的所有子进程 - positional parameters
位置参数:$0, $1, $2…10, {11}
下面是关于位置参数以及shift的用法
- local variables
#!/bin/bash#first argecho "first arg is $0"#last argecho "last arg is ${!#}"#shiftfor p in "$@"do echo -n "$1 " shiftdoneechoecho -n "after shifts: "#default valueecho ${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 基本的入门知识。如背景知识,常用的符号以及一些变量的用法。对于一些基本语句,就没怎么说明了。
常用的语句,如条件语句,循环语句等。
- bash 基础
- Bash 基础
- Bash基础
- Bash基础
- bash基础
- bash 基础
- Bash基础
- bash基础
- bash入门基础
- Bash脚本编程基础
- bash基础学习
- Bash 基础学习笔记
- bash基础编程总结
- bash基础学习
- 【Linux基础】Bash Shell
- bash入门基础
- bash shell 基础
- Bash编程基础
- 【NGUI实例开发】实现弹窗面板
- leetcode 016 Letter Combinations of a Phone Number(Python)
- 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
- Tiny框架2.0版火热推出
- Word API
- Bash 基础
- c语言输入一个字符串,将其按照相反顺序存入同一个数组
- 白话经典算法系列之五 归并排序的实现
- [bzoj 2654] tree
- Dictionary API
- 算法练习:最大下标距离
- ZigZag(c)
- FastDictionary API
- 文章标题