1、基本语法:
1)Shell脚本变量和定义之间不能有空格
2)单引号:不识别特殊语法。 双引号:识别特殊语法。
3)环境变量:
每个用户都有自己的环境变量配置文件。~/.bash_profile 或 ~/.bashrc。且以个人配置文件优先加载变量,读取,以个人的优先生效。
全局配置文件/etc/profile、/etc/bashrc,且系统建议最好创建在/etc/profile.d/,而非直接修改主文件,修改全局配置文件,影响所有登录系统的用户。
4)调用:
每次调用bin/bash 就会开启一个子Shell,不保留当前的Shell变量,可以通过pstree检查进程树。
调用source或者.是在当前Shell环境加载脚本,因此保留变量。
2、基本命令:
``是反引号: user=`ls`,echo $user会将当前文件夹的文件名全部转成字符串后,放在了user中
HISTSIZE: echo $HISTSIZE -- 查询Shell history能保留多少条命令
HISTFILE:echo $HISTFILE -- 查询Shell History中保留的命令记录所在的文件。
history:
-c:清空历史
-r:恢复历史
!+历史命令的ID : 调用历史命令eg:!1000
!! :执行上次的命令。
set:找到当前的Shell环境中所有变量,以及包括局部变量。
env 只显示全局变量
declare 输出所有的变量。 -- 同set
export 显示环境变量值。
unset 删除变量,环境变量
readonly 只读变量
${vars}和$vars:取出变量结果
$()和``:在括号中执行命令,且拿到命令的执行结果。
():开启了子Shell执行命令。
转义符\:还原符号原本的意思,不会被阅读成特殊含义。也可以用''(单引号),中间的都是符号原本的意思。
3、特殊变量:
$#:表示执行脚本传入参数的个数
$*:执行脚本传入参数的列表(不包括$0) -- 所有的参数是一个整体
$@:脚本传入的所有参数(区分各个参数)
$0:脚本名称
$1:表示第一个参数
$2:表示第二个参数
${10}:表示第十个参数
$*和 $@详细区别:Shell $*和$@的区别
4、特殊状态变量:
$?:表示上一次脚本执行的状态,0表示正常,其他表示错误
$$:进程Id,脚本运行的当前进程Id号
$!:Shell最后运行的后台Process的Id。
$_:取得上次命令的最后一个参数
5、shell 快捷键:
Ctrl+L:清除终端屏幕并将光标定位在顶部。
Ctrl+A:将光标移动到当前命令行的开头。
Ctrl+E:将光标移动到当前命令行的末尾。
Ctrl+U:删除光标之前的所有字符。
Ctrl+K:删除光标之后的所有字符。
Ctrl+C:中断当前正在运行的命令。
Ctrl+Z:将当前正在运行的命令置于后台。
Ctrl+D:退出当前的终端会话。
Ctrl+W:删除光标之前的一个单词。
Ctrl+R:在历史命令中进行逆向搜索。
Ctrl+G:退出当前的搜索模式。
Tab:自动补全命令或文件名。
Shift+Tab:逆向自动补全命令或文件名。
Ctrl+P:向上浏览历史命令。 -- 上键
Ctrl+N:向下浏览历史命令。 -- 下键
6、重定向:
> 标准输出覆盖重定向:将命令的输出重定向输出到其他文件中
>> 标准输出追加重定向:将命令的输出重定向输出到其他文件中
>& 标识输出重定向:将一个标识的输出重定向到另一个标识的输入
< 标准输入重定向:命令将从指定文件中读取输入而不是从键盘输入
| 管道符,从一个命令中读取输出并作为另一个命令的输入
7、Shell子串用法:
${变量}: 返回变量值
${#变量}:返回变量长度
${变量:start}:返回变量Start数值之后的字符,包括Start的数字
${变量:start:length}:返回变量Start之后的Length长度的字符。
${变量#word}:从变量开头删除最短匹配的Word子串
${变量##word}:从变量开头删除最长匹配的Word子串
${变量%word}:从变量结尾删除最短的Word子串
${变量%%word}:从变量结尾删除最长的Word子串
${变量/pattern/string}:用String代替第一个匹配的Pattern
${变量//pattern//string }:用String代替所有的Pattern
wc –l :计算文件中的行数
wc –L :找出文件中的最长的行数并输出其字符的长度
8、变量的处理: 四个扩展的变量都是属于对变量的值进行判断、处理。
res=${para:-word} 如果para是空,返回word给Res
res=${para:=word} 如果para是空,返回word给para和Res
res=${para:?word} 如果para是空,返回word给Res,若不为空的话则返回para
res=${para:+word} 如果para是空,什么都不做。否则返回word