SHELL编程基础(一)

给你一囗甜甜゛ 提交于 2019-12-30 00:56:22

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/

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!