用户名
Email
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
帖子
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
云原生
›
[Linux][Shell][Shell底子] -- [Shebang][特殊符号][变 ...
[Linux][Shell][Shell底子] -- [Shebang][特殊符号][变量][父子Shell]具体 ...
美食家大橙子
论坛元老
|
2024-7-18 07:22:02
|
显示全部楼层
|
阅读模式
楼主
主题
1891
|
帖子
1891
|
积分
5673
0.前置知识
#用于注释
shell脚本语⾔属于⼀种
弱范例语⾔:
⽆需声明变量范例,直接定义使⽤
shell三剑客:grep、sed、awk
shell编程,尽量⽤内置体系操作,与内置函数
1.Shebang
盘算机程序中,Shebang指的是出如今
⽂本⽂件的第⼀⾏前两个字符
#!
在Unix体系中,
程序会分析Shebang后⾯的内容,作为解释器的指令
,例如:
以#!/bin/sh开头的⽂件,程序在执⾏的时间会调⽤/bin/sh,也就是bash解释器
以#!/usr/bin/python开头的⽂件,代表指定Python解释器去执⾏
以#!/usr/bin/env解释器名称,
是⼀种在不同平台上都能正确找到解释器的办法
注意事项
如果脚本未指定Shebang
,脚本执⾏的时间,默认⽤当前shell去解释脚本,即$SHELL
如果Shebang指定了可执⾏的解释器,如/bin/bash /usr/bin/python,脚本在执⾏时,⽂件名会作为参数通报给解释器
如果#!指定的解释程序没有可执⾏权限,则会报错“bad interpreter: Permission denied”
如果#!指定的解释程序不是⼀个可执⾏⽂件,那么指定的解释程序会被忽略,转⽽交给当前的SHELL去执⾏这个脚本
如果#!指定的解释程序不存在,那么会报错“bad interpreter: No such file or directory”
#!之后的解释程序,需要写其绝对路径
(如:#!/bin/bash),它是不会⾃动到$PATH中寻找解释器的
如果使⽤bash test.sh如许的命令来执⾏脚本,那么#!这⼀⾏将会被忽略掉,解释器当然是⽤命令⾏
2.Linux特殊符号整理
${vars}:取值变量的值
$():在括号中执行命令,且拿到命令的执行结果
` `:在括号中执行命令,且拿到命令的执行结果
():开启子shell执行命令结果
$vars:取出变量值
3.变量
变量定义与赋值,
注意变量与值之间不得有空格
变量范例
:bash默认把全部变量都以为是
字符串
bash变量是弱范例,无需事先声明变量范例,声明和赋值同时进行
name="SnowK"
复制代码
变量更换/引用
name="SnowK"
echo ${name}echo $name # {}可以省略
复制代码
变量名规则
名称定义要做到⻅名知意,切按照规则来,
切不得引⽤保留关键字
只能包含数字、字⺟、下划线
不能以数字开头
不能⽤标点符号
变量名严格区分⼤⼩写
变量的作用域
本地变量
:只针对当前的shell历程
环境变量
:也称为全局变量,针对当前shell以及其恣意子历程
环境变量也分
自定义、内置两
种环境变量
局部变量
:针对在shell函数或是shell脚本中定义
位置参数变量
:用于shell脚本中通报的参数
例如
:ls -l,中的-l就是位置参数变量
特殊变量
:shell内置的特殊功能变量
$?
0
:乐成
1~255
:错误码
自定义变量
变量赋值
:varName=value
变量引用
:${varName}、$varName
单引号变量
,不识别特殊语法
双引号变量
,能识别特殊语法
不同的执行方式,不同的shell环境
每次调⽤bash都会开启⼀个⼦shell,因此不保留当前的shell变量
调⽤source大概.符号,是在当前shell环境加载脚本,因此保留变量
在Linux中,
反引号
中的命令的执行结果会被保留下来(存进对应的变量中)
4.环境变量
环境变量
:⼀般指的是⽤export内置命令导出的变量,⽤于定义shell的运⾏环境、包管shell命令的正确执⾏
shell通过环境变量确定登录的⽤户名、PATH路径、⽂件体系等各种应⽤
环境变量可以在命令⾏中暂时创建,但是⽤户退出shell终端,变量即丢失,
如要永久⽣效,需要修改环境变量配置⽂件
用户个人配置文件
:
~/.bash_profile
~/.bashrc:长途登岸用户特有文件
全局配置文件
:修改全局配置文件,影响全部登岸体系的用户
/etc/profile
/etc/bashrc
体系发起最好创建在/etc/profile.d/,而非直接修改主文件
以个人配置文件,优先加载、读取、收效
查抄体系环境变量的命令
set:输出全部变量,包括全局变量、局部变量
env:只显示出全局变量
declare:输出全部的变量,犹如set
export:显示和设置环境变量值
打消环境变量
:unset 变量名:删除变量或函数
设置只读变量
:readonly:只有shell竣事,只读变量才失效
环境变量初始化与加载顺序
5.父子shell
0.概念
父子shell
source和.,执行脚本,只在当前的shell环境中执行收效
指定bash sh解释器运行脚本,是开启subshell,开启子shell运行脚本命令
./script,都会指定Shebang,通过解释器运行,也是开启subshell运行命令
子shell
多个子shell
1.创建历程列表(创建子shell执行命令)
为什么学习子shell?意义在那里?
为了某个指令不卡住当前shell,开启子shell以到达
异步
的目标
实现多历程的处理,提高程序并发执行服从
历程列表
:加上(),开启子shell运行命令,并且子shell是可以嵌套运行的
(cd ~; pwd; ls; cd /tmp; pwd; ls)
(pwd; (echo $BASH_SUBSHELL))
复制代码
检测是否在子shell环境中
:BASH_SUBSHELL:该变量的值特点
如果是0,就是在
当前shell环境中执行的
否则就是
开发
子shell去运行的
示例
:
检测是否开启了子shell运行命令
:
cd ~; pwd; ls; cd /tmp; pwd; ls; echo $BASH_SUBSHELL
明白开启子shell运行的命令
:
(cd ~; pwd; ls; cd /tmp; pwd; ls; echo $BASH_SUBSHELL)
6.内置命令 vs 外置命令
什么是内置命令,什么是外置命令?
内置命令
:在体系启动时就加载入内存,常驻内存,执行服从更高,但是占用资源
内置命令和shell是为一体的,是shell的一部分,不需要单独去读取某个文件,体系启动后,就执行在内存中了
特点
:不会产生子历程去执行
外置命令
:体系需要从硬盘中读取程序文件,再读入内存加载
本身单独下载的文件体系命令,处于bash shell之外的程序
特点
:一定会开启子历程执行
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
美食家大橙子
论坛元老
这个人很懒什么都没写!
楼主热帖
【计算机视觉】图像检索
面了个腾讯拿28k跳槽出来的,真正见识 ...
全面数字化时代,国有大型银行如何走好 ...
MySQL实战45讲 11
【大话云原生】负载均衡篇-小饭馆客流 ...
K8S 性能优化 - OS sysctl 调优
【kotlin】第一天
解决Mac下腾讯会议无法使用OBS等虚拟摄 ...
【docker专栏2】CentOS操作系统安装Doc ...
Python入门自学进阶-Web框架——14、Dj ...
标签云
集成商
AI
运维
CIO
存储
服务器
登录参与点评抽奖加入IT实名职场社区
下次自动登录
忘记密码?点此找回!
登陆
新用户注册
用其它账号登录:
关闭
快速回复
返回顶部
返回列表