Bash学习笔记
admin
2024-03-12 21:03:14
0

Bash的类型与配置

Login Bash

运行Login Bash脚本共会初始化四个配置文件,分别是全局配置文件/etc/profile,以及用户配置文件~/.profile, ~/.bash_login, ~/.bash_profile

全局配置:/etc/profile。为所有登录的用户添加执行的命令。

如果想添加全局配置,除了可以直接修改/etc/profile文件,还可以预设一个文件夹profile.d,在profile文件中设置一个for循环执行其中的所有.sh配置文件。这样可以降低修改文件带来的风险。

Bash脚本的执行顺序

父shell使用fork命令启动一个子shell
子shell会继承父shell的环境变量,函数等信息
子shell执行
子shell结束,销毁相关环境
父shell获取子shell的退出状态

常用命令

source:读取配置文件中的所有配置。
eval:将上一次命令的执行结果再作为一次命令进行执行
dirname $0: dirname表示获取路径名,$0参数表示当前脚本执行的路径,推荐使用该方法替换pwd获取当前脚本所在的路径名。

Bash基础语法

Bash命令的解析

在bash命令正式执行之前,会先对输入的命令行进行解析,解析共可分为7部分,在解析过程中会严格按照以下顺序执行:
花括号扩展(brace expansion):将花括号内的数字或字母逐个展开,如果有多个连续花括号则会对其中的内容进行排列组合,例如:{1… 10} {2, 4, 6} {a… f},如果不符合以上规范则不进行任何操作。
波浪线扩展(tilde expansion):~会被扩展为当前用户的主目录,即HOME值,例如:cd变量扩展(parametervariableexpansion):将HOME值,例如:cd ~ 变量扩展(parameter variable expansion):将HOME值,例如:cd 变量扩展(parametervariableexpansion):将后的变量名替换为变量值,例如:echo $HOME
算数扩展(arithmetic expansion):进行整数算数运算,例如:((i++)),((10 > 5)), ((11 * 12))
命令替换(command substitution):将命令执行的结果赋值给一个变量,例如:today = $(date + %F), line = $(grep xxx yyy)
词的拆分(Word splitting):将变量值按照空格符进行拆分
路径名扩展(pathname expansion):将通配符扩展为文件名,通配符共有和?两种,其中代表任意长度的字符串,?代表长度为1的任意字符,[1-9]代表其中的任意一个字符, @与*的作用类似,但在@中,分割符将不会被替换。

变量

变量赋值:name=value
变量引用:name注意事项:=两边不允许出现空格,name 注意事项:=两边不允许出现空格,name注意事项:=两边不允许出现空格,name是name的简写命令替换:{name}的简写 命令替换:name的简写命令替换:(),将一条命令语句赋值给一个变量。

常用变量

$?: 上个命令的结束状态
$!: 最后一个后天进程的pid
$0: 脚本或函数的名字
$n: 脚本或函数的第n个参数
$#: 脚本或函数的参数个数
$@: 脚本或函数的所有参数
$$: 当前脚本的pid
$UID: 当前用户的uid
$LOGNAME: 用户名
$HOSTNAME: 主机名
$RANDOM: 生成1-32767之间的随机数
$SECONDS: 当前脚本已经消耗的秒数
$PWD: 当前工作路径

环境变量

$PATH: 命令搜索的路径名
$LANG: locale,设置地区语言
$LC_ALL: locale
$TERM: 终端类型
$EDITOR: 设置默认的编辑器类型
环境变量的永久设置:export name=value
单个脚本设置只需:name=value

数值运算

流程控制

if
case
while
until
for var in list

重定向

一个进程运行时,内核会为其准备3个默认的文件描述符
STDIN(0), STDOUT(1), STDERR(2)
默认情况下,输出会被定向到屏幕,错误也会对定向到屏幕。可以通过重定向对应的文件描述符使输出与错误输出到文件上。

echo xxx > file // 重写
echo xxx 1> file // 与上一个相同
echo xxx >> file // 续写
read line < file // 输出重定向
echo xxx 2> file // 错误输出重定向
echo xxx > /dev/null 2>&1 // 标准输出与错误输出全部不记录
echo xxx &> /dev/null // 与上一条相同
echo xxx >> log 2>&1 // 输入输出全部定向到log文件

块重定向

可以在if,case,while,for语句之后接上重定向,代表内部所有语句均被重定向
还可以使用()与{}包含多条语句,代表其中的语句均被重定向。
其中()会新建一个sub shell其内部的所有变量外部均感知不到。

函数

函数需要先定义后使用。
函数内部默认使用的都是全局变量,可以使用local声明局部变量。

Bash监控程序的编写

bash -n 检查语法
bash -x 打印执行过程

Bash编程模板

相关内容

热门资讯

原创 三... 小暑一过,这天儿就跟糊了层保鲜膜似的,闷得人喘不上气儿。走两步路,后背就黏糊糊的,晚上躺床上翻来覆去...
原创 煮... 咱今儿个来唠唠福寿螺这玩意儿哈。你瞧,福寿螺这东西,打从被引进咱国内后,那可真是 “名声大噪”,不过...
海外华裔大学生海南研习行:一碗... 中新网海口7月12日电 (记者 张茜翼)“嗦——”一声轻响,18岁的澳大利亚海南籍华裔大学生黎锦辉将...
如何恢复自己昔日的辉煌? 如何恢复自己昔日的辉煌?既然都知道自毕隐渗己的不足了,那就得努力改正,现在还是小学,很多携陵坏习惯只...
形容夏天的成语。[肉山脯林]是... 形容夏天的成语。[肉山脯林]是什么意思 ?赤日炎炎 绿树成荫 挥汗如雨 绿树成荫 挥汗如雨 蝉声阵...
准爸爸在胎教中的职责有哪些 准爸爸在胎教中的职责有哪些胎教是一个家庭的事,不能单把胎教的责任推给宝妈,作为宝爸也是有责任的,虽然...
鹿_的读音鹿_的读音是什么 鹿_的读音鹿_的读音是什么鹿_的读音是:lùmí。鹿_的拼音是:lùmí。注音是:ㄌㄨ_ㄇ一_。结构...
雅雅的解释 雅雅的解释雅雅的解释词语分解 雅的解释 雅 ǎ 正规的, 标准 的:雅言。 雅正 (a.规范的;b...
初三的六一儿童节中小马哥死了吗 初三的六一儿童节中小马哥死了吗初三汪纤判的六一儿童节中,小马哥没有死。港风巨制小说《初三的六一儿童节...
吴三桂为了陈圆圆而反叛,还有哪... 吴三桂为了陈圆圆而反叛,还有哪些一怒为红颜的历史典故?吕布为了貂蝉和董卓闹翻,春秋时期的夏姬,号称“...
赵兰梅和孙明明的关系 赵兰梅和孙明明的关系赵兰梅和孙明明的关凯尘系是:1、岳母与女婿关系。赵兰梅是孙明明的岳母,孙明明是赵...
课前三分钟演讲(哲理故事+分析... 课前三分钟演讲(哲理故事+分析)初二的水平..其实就是1、2个哲理故事,最后加上总结性的分析 1—2...
天珠变里周维清说的那个色老头是... 天珠变里周维清说的那个色老头是谁?周维清的天珠一共有六种属性,分别是风、雷、黑暗、空间、邪恶、时间目...
神秘的什么作文,要写成童话故事 神秘的什么作文,要写成童话故事神秘的花园、、、童话故事= =这题材真没写过。不过可以写成小小说的模式...
小学二年级编写一个和数学有关的... 小学二年级编写一个和数学有关的小故事,急?我有一个好朋友,它的名字叫“数学”,现在让我来告诉你关于“...
你觉得哪个男星是小鲜肉无论怎么... 你觉得哪个男星是小鲜肉无论怎么努力都无法超越的?那只能是有韵味的大叔是小鲜肉无法逾越的。最近看《吐槽...
都市异能小说,主角要无敌。 都市异能小说,主角要无敌。比如中国龙组,超级学生..都市类..出来就无敌了..无郁闷疯狂内功..都市...
昨天去幼儿园接女儿的时候,听到... 昨天去幼儿园接女儿的时候,听到别的家长提到一个童装品牌Bonpoint,这是个什么牌子?Bonpoi...
新疆十五天高端深度游每人多少?... 七月的新疆,简直是上帝打翻的调色盘!琼库什台大环线的风光更是美得让人挪不开眼,草原像铺了层厚厚的绿绒...
文旅焕彩春城夜 避暑休闲乐逍遥 当夏日的热浪奔涌而来,绿草如茵的露营地成为人们心目中的消夏好去处。7月11日傍晚,青怡坊云琅城市露营...