SHELL编程基础
shell分登录shell,交互式非登录shell,还有非交互式shell。
登录式shell属于交互式shell,相关执行文件是etc/profile
交互式非登录shell中并不执行初始化文件中的命令,然而交互式非登录shell从登录shell中继承了由这些初始化文件设置的shell变量。
非交互式shell并不执行初始化文件中的命令,然而交互式非登录shell从登录shell中继承了由这些初始化文件设置的shell变量。
子shell继承了那些被输出的变量。
#Source global definitions
if[ -f /etc/bashrc ]; then
./etc/bashrc
fi
用户常用的初始化文件由.bash_profile,.bashrc
编辑完.bashrc这类的初始化文件后,没必要重启,用内置命令”.”或source即可。也就是说,可以用”.”或source命令来运行任何shell脚本,而不仅仅是初始化文件。
1、内置符号
()子shell
$()命令替换
(())算术表达式计算,let同义词,当被括起来的值中包括等号时使用
$(())算术扩展(不适用于括起来的值中包括等号的情况)
[]test命令
[[]]条件表达式,类似于[],但添加了字符串比较。
2、通配符
*
?
[xxx],[x-x]
转义字符\x,消除字符的特殊含义
$两个含义:表达式中的单个字符模式匹配和脚本中的变量赋值。
History[n]
命令别名:aliasll='ls -l'
unaliasll
重定向:>
管道 |
其它符号:
符号/内容
* 万用字符,代表一个或多个字符(或数字)
? 万用字符,代表一个字母
# 批注,这个最常被使用在script 当中,视为说明!
\ 跳脱符号,将『特殊字符或万用字符』还原成一般字符
| 分隔两个管线命令的界定;
; 连续性命令的界定(注意!与管线命令并不相同)
~ 使用者的家目录
$ 亦即是变量之前需要加的变量取代值
& 将指令变成背景下工作
! 逻辑运算意义上的『非』not 的意思!
/ 路径分隔的符号
>, >> 输出导向,分别是『取代』与『累加』
' 单引号,不具有变量置换的功能
" 具有变量置换的功能!
` ` 两个『 `』中间为可以先执行的指令!
() 在中间为子 shell的起始与结束
[] 在中间为字符的组合
{} 在中间为命令区块的组合!
3、bash提示符
有两级提示符,第一级就是通常看到的,保存在shell变量$PS1中,二级提示符保存在$PS2中(第二级提示符是当shell发现用户的命令不全,告诉用户还需要更多输入时显示的提示符,如可以用>)
永久改变以在$HOME/.bashrc文件中添加exportPS1=”提示符”
其它特殊符号
\d:代表日期,格式为weekdaymonth date,例如:"MonAug 1"
\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux
\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略
\t :显示时间为24小时格式,如:HH:MM:SS
\T :显示时间为12小时格式
\A :显示时间为24小时格式:HH:MM
\u :当前用户的账号名称
\v:BASH的版本信息
\w :完整的工作目录名称。家目录会以~代替
\W:利用basename取得工作目录名称,所以只会列出最后一个目录
\# :下达的第几个命令,也就是命令编号
\$:提示字符,如果是root时,提示符为:#,普通用户则为:$
4、重定向标准错误输出
1)文件描述符
0标准输入
1标准输出
2标准错误输出
>是1>的简写
<是0<的简写
>将命令输出写入到文件或设备(例如打印机)中,而不是写在命令提示符窗口中。
>>将命令输出添加到文件末尾而不删除文件中的信息。
>&将一个句柄的输出写入到另一个句柄的输入中。
tr的作用是:Translate,sq?ze, and/or delete characters from standard input,
writingto standard output。
用法:tr[选项]... SET1[SET2],仅在SET1和SET2 都给出,同时没有-d选项的时候才会进行替换。
cat/home/edwardlewiswe/test.txt | tr "[a-z]" "[A-Z]"
2>&1声明文件描述符2为文件描述符1的副本。
/home/edwardlewiswe/test.txt1> temp 2>&1
其它
>>file
将STDOUT(标准输出/Standardoutput) 字符串追加到文件内容之后,当设定$noclobber 时,可重写文件。
>file
将STDOUT(标准输出/Standardoutput) 重定向到新文件,当设定 $noclobber时,可重写文件
>&file
将STDOUT(标准输出/Standardoutput) 及 STDERR(标准错误/Standarderror) 重定向到文件
(command>& file)
>>&
将STDOUT(标准输出/Standardoutput) 及 STDERR(标准错误/Standarderror) 字符串追加到文件内容之后
(command>>& file)
[n]>&-
关闭 STDOUT(标准输出/Standardoutput)或文件描述符n
(command>&-)
参考
[1]http://yhj1065.blog.163.com/blog/static/198002172010125115954531/
来源:CSDN
作者:hopegrace
链接:https://blog.csdn.net/hopegrace/article/details/103758034