一、Bash:登录linux或打开xterm时,默认的shell为Bash。
Bash是GNU Project的Shell,GNU Project是Free Software Foundation 的一部分,负责linux下的编程工具。
用echo $BASH_VERSION,若显示版本号等信息,表示正在使用的是Bash;显示错误信息或无版本号,表示使用不同的shell。可用exec /bin/bash调用Bash。
功能:1)在Bash命令行中输入命令,由shell解释执行;2)支持shell脚本,可逐条执行组合的命令。
二、创建脚本(用Emacs编辑 :emacs scriptName)
输入:#! /bin/bash
echo hello
echo press enter to exit
read
按ctrl+x+s保存。=》输入命令:source scriptName执行该脚本。
或先标记脚本的可执行属性,用命令:chmod a+x scriptName.=》输入命令:./scriptName可直接执行(./表示当前目录)。
三、启动Bash
由于调用Bash会话进程时,shell可自动执行一个shell脚本。因此可以在bash启动时,执行全部的脚本系统,eg. .profile
四、返回值:在bash提示符或脚本中运行一个命令,该程序都有一个返回值。用echo $?,可显示最后一条命令的退出码。0正常退出,1~127错误退出,大于127表示程序中断退出。
五、命令组合
1.逐条执行:用分号串联
2.条件组合:
OR"||":当第一条命令失败时,才执行第二条命令,直到某命令执行成功或全部执行完)。AND"&&":只有第一条命令成功执行时,才执行第二条命令,直到某命令执行失败或全部执行完。
eg. command1&&command2||command3 <=> if com1;then com2;else com3
六、通配符
*:与任意个数的字符匹配。 ?:与一个字符匹配。
[...](字符类):与其中某个字符匹配。 [....](范围 a-z,0-100)
七、引号&转义:不希望shell解释命令行中的通配符、变量、特殊字符。
1.将只取文字意义的任何内容用单引号或双引号括起来。双引号允许特殊字符保持特有意义,单引号将屏蔽任何字符的特殊含义,因此更安全。
2.转义字符 / :不能转义非特殊字符。eg. echo hi > "Test File" <=> echo hi > Test / File.
3.Perl注释:#单行注释。 #!指定负责执行脚本的解释器的名字。
八、重定向&管道
输出重定向>: 获得屏幕上显示的内容,保存到文件中;输入重定向<:用文件代替键盘输入。
管道:用于串联命令,将上一命令的输出作为下一命令的输入。可以使所有命令同时执行,且避免产生中间文件。
eg. ls -l directoryName > fileName,cat fileName
标准错误处理重定向: ls -l 不存在目录名 > fileName.err , cat fileName.err
若原文件已存在,则完全替换;若在原文件末尾添加,用>>
九、变量
赋值 $variableName=value 。 获取变量值 $variableName 。 删除变量 unset variableName.
环境变量:可由其他程序传递给脚本;在脚本中调用的任何程序,将继承环境变量。用set命令获取当前上下文中的全部变量。
eg. $LESS=-i
$export LESS
十、函数 (VS 脚本:都可用于完成重复性任务)
脚本需由独立进程调用并控制,不能修改当前shell上下文中的变量。
条件:if list; then list; [elif list; then list; ]....[else list; ] fi
case word in [(pattern [| pattern]...) list;;]...esac
循环:while list; do list; done
for name [in word; ] do list; done