Linux shell的一些特性

Unix/Linux环境下的Shell交互特性 本章介绍了在Unix、Linux和Mac系统上,Bash和Korn两种POSIX兼容Shell的交互式和非标准特性。包括如何指定文件的解释器,以及如何通过ENV变量设置Shell环境。此外,还探讨了命令行编辑、命令历史记录和vi行编辑模式等实用功能。 阅读详情
    1.变量替换及应用


${var:-word}              如果var存在且非空,则返回var,否则返回word但是不替换var
${var:+word}             如果var存在且非空,则返回word(不替换var),否则返回var
${var:=word}             如果var存在或为空,则返回var,否则返回word且替换var
${var:?message}       如果var存在且非空,返回var,否则返回"var:message"这个字符串
${var:offset}               在var中提从offset到其末尾的子字符串
${var:offset:length}    在var中从offset开始提取length长的子字符串
${var#pattern}           返回删除掉var中开头pattern最短匹配后剩余的字符串
${var##pattern}         返回删除掉var中开头pattern最长匹配后剩余的字符串
${var%pattern}          返回删除掉var中结尾pattern最短匹配后剩余的字符串
${var%%pattern}       返回删除掉var中结尾pattern最长匹配后剩余的字符串
${var/pattern/string} 用string替换var中开头pattern的最短匹配
${var//pattern/string} 用string替换var中开头pattern的最长匹配


例子:
${*:-.}                如果没有提供位置参数则使用当前目录
${path##*/}       从全路径中获取基本文件名,等价于basename(外部程序没shell内置机制效率高)
${path%/*}        获取目录名,等价于dirname(外部程序没shell内置机制效率高)


    2.命令替换及应用


$(command)
`command`


ROOT=`pwd` <=> ROOT=$(pwd)


    3.数学运算


let i=i+1 bash             内置变量(不能加空格)
((i += 2))                     运算符可用空格隔开
i=`expr 3 \* 5`              注意需要转义符
i=$(expr 3 \* 5)
i=`echo "scale=2; $TSIZE/$SSIZE*100" | bc -l`       bc命令不一定每个linux用户都安装了
declare -i a=1 b=2;declare c=a+b           声明称整数来计算


    4.数组及应用


数组初始化:
var[index]=value           整数做下标
var[string]=value            字符串做下标
var=(value1 value2 ...)   空格隔开


清空数组:
var=
unset var
unset var[value]


引用数组数据:
${var}                     引用不带下标的数组,得到数组第一个元素
${var[variable]}      下标使用变量时不需要美元符号引用
${var[@]}                得到数组所有元素
${var[*]}                 得到数组所有元素
${#var[@]}             得到数组元素个数
${#var[*]}               得到数组元素个数


    5.特殊变量


$$ 当前shell的PID
$! 在后台运行的最后一个作业的PID
$? 关于上个执行指令的回传码
$0 当前shell的名字
$n (n:1-) 位置参数
$# 参数个数
$* 所有位置参数组成的单一字符串
$@ 每个位置参数的字符串组合成的


$*和$@的区别
$*将所有位置参数作为单一字符串
$@是所有位置参数的字符串组合


function "$*"           函数参数只有一个
function "$@"        函数参数有多个


    6.命令行选项


通常使用getopts,第一个冒号表示用户键入错误选项时不提示
$OPTARG表示选项对应的参数值,$OPTIND表示命令行选项的索引


模板:
while getopts ":X1:X2:..." opt;do
case $opt in
   x1) value_x1=$OPTARG;;
   X2) ..;;
esac
done
shift $(($OPTIND-1))


    7.命令行解析


一个shell命令行的完整处理过程:


1).将输入分隔成记号(记号包括单词,关键字,I/O定向符,分号等)
2).检测每个命令的第一个记号,若为开发关键字(像if等)则继续匹配一个完整的符合命令,重复处理完成,返回步骤1。
3).别名检测(检测第一个记号是别名就进行替换,返回步骤1)
4).大括号扩展(a{b,c}扩展为ab ac)
5).~符号扩展(如果存在替换为$HOME)
6).变量(参数)替换(以$开头的表达式)
7).命令替换(对$(string)形式进行)
8).算术替换(对$((string))进行计算)
9).单词分隔(使用$IFS中的字符分隔参数,命令,算术替换中的部分成单词)
10).路径名扩展(通配符扩展,例如*,/等)
11).命令查询(函数>内置命令>脚本和可执行程序)
12).运行命令(设置完I/O重定向后执行命令)


单引号‘’(绕过前10个步骤)
单引号中的命令只能执行路径扩展,命令查找


双引号""(绕过步骤1~5,9,10)
双引号中可以使用参数替换,命令替换,算术替换


命令查找顺序可以用command,builtin,enable来修改
command删除别名和函数查找
builtin只查找内置命令
enable -a显示所有命令及其是否可用


eval通知shell接受eval参数,并再次通过命令行处理的所有步骤来运行
所以被绕过的步骤可以重新解析


shell解析命令顺序
别名>关键字>函数>内置命令>脚本和可执行程序


    8.进程控制


作业编号指当前运行在用户shell下的后台进程(不同shell窗口下的作业毫无关系)
进程ID指当前运行在整个系统上的所有用户的进程


作业控制:


jobs -l列出作业的完整信息


引用后台作业的方式:
fg %N            作业编号N
fg %string     作业命令名以string开始的作业
fg %?string   作业命令包含的string的作业
fg %+           最近被调用的后台作业(引用被放到后台的最新作业)
fg %%          同上
fg %-            第二个最近被调用的后台作业
fg (不带%)    作业进程ID


使用的作业控制的好处:
有可能前台的作业运行时间很长,而你还想用控制终端做其他操作,这是就可以将其放到后台
CTRL-Z即将当前作业放到后台


kill用法:
kill参数可以使进程ID,作业编号,进程命令名
kill默认发送TERM信号到目标,但可以改变所发信号类型
kill -l 列出支持的所有信号名称和编号列表
CTRL-C   INIT
CTRL-\     QUIT
CTRL-Z   TSTP
kill   TERM


stty signame char可以绑定信号到什么控制键上 例如:stty intr ^X


kill         %作业编号
kill           进程ID
kill          进程名
kill          信号类型 参数


协同程序:
shell命令行下协同,执行命令之间使用&即可
脚本里面,最后必须加上wait命令保证所有后台作业都完成


模式:
命令1 &
...
命令2
wait


进程使用系统资源的特性:CPU密集型,I/O密集型,交互式


对于I/O密集型使用一个大型计算的作用会较好
对于CPU密集型,多通过shell并发执行回提高效率


当在一个多CPU计算机上启动一个后台作业时,计算机会将其赋予到下一个可用处理器
这意味着两个作业时间上运行在同一时刻,所有能提升效率


子shell:
子shell继承的东西:
1)当前目录
2)环境变量
3)标准输入,标准输出,标准错误,以及其他任何打开的文件描述符
4)被忽略的信号(trap)
未继承的东东:
1)shell变量(除了环境变量和定义在环境文件中.bashrc的变量)
2)没被忽略的信号处理


exec精髓,替换本shell来执行exec参数中的命令对本shell一直发生影响
exec 2>errlog 把脚本中所有错误写到errlog文件中(放在脚本开头)
exec switch_root /newroot "/sbin/init" 启动脚本中常常见到

深入探索Linux Shell的函数式编程特性 在如今这个追求高效率与可维护性的编程时代,函数式编程(Functional Programming, FP)模式已经被越来越多的开发者所青睐。作为IT专业人员,理解和掌握Shell脚本中的函数式编程特性,不仅可以提升你的代码品质,还能提高编写脚本的效率和系统管理的便捷性。本章,我们将从函数式编程在Shell环境下的应用入手,探讨其背后的原理及实现方式,为后续章节的深入学习打下坚实的基础。 阅读详情

相关推荐

AHB协议中hreadyout和hready_in的区别

上面这张时序图表明master有两笔写传输,第一笔传输为slave1(s1),传输类型为SEQ,在第一笔传输的第二个周期,也就是第一笔传输的dataphase,此时slave1没有准备好被写数据,因此把s1_hreadyout拉低,但此时slave2已经看到自己的NONSEQ传输了,而且slave2已经是准备好了的。重新拿上面的仿真图看一下,由于前一个周期的s1_hreadyout为低电平,所以s2的hready_in也为低电平,那么该周期s2不会对addr以及控制信号进行采样。就不会出现上面的问题。...

weixin_44101336的博客 2865

一、Shell特性

Shell 一、执行环境 /usr/bin/bash shell运行环境 /usr/bin/python python运行环境 /usr/bin/expect expect运行环境 /usr/bin/perl perl运行环境 JDK java虚拟机 二、shell的执行工具 当前环境生效:. 脚本名 / source 脚本名 (执行后会在当前环境直接生效) 子she...

北海牧野 833

【技术拆解】Illumina边合成边测序(SBS)核心流程全解析 | 从文库构建到数据分析

本文深入解析了Illumina边合成边测序(SBS)技术的完整流程。从DNA样本的文库构建(片段化、加接头、扩增),到Flowcell上的簇生成(桥式PCR),再到核心的边合成边测序(SBS)循环(荧光标记、可逆终止),最后简述了从原始数据到生物学洞见的数据分析步骤,为理解这一主流高通量测序技术提供了清晰的框架。

weixin_29201859的博客 535

shell的特性

shell的特性~/.bash_history命令历史存放文件,登出后保存。$HISTSIZE命令历史条数,允许~/.bash_history文件存储的命令条数,默认1000.!!:上一条命令!$:上一条命令的最后一个参数!命令标号:执行history输出中的对应的命令*:通配符,任意个任意字符;?:通配符,一个任意字符 在当前shell定义的alias只在当前shel...

weixin_34138377的博客 374

Windows如何使用Anaconda 3进行keras环境的配置

** Windows如何使用Anaconda 3进行keras环境的配置 搭建Keras环境* Anaconda3如何安装keras,主要包括下面三步: 1.安装mingw libpython 2.安装theano 3.安装keras 若你还没有按装anaconda,赶紧下载安装吧! 下载途径有两个 (1)Anaconda版本为Anaconda 4.4.0,对应的python版本为3.6,附上An...

Lance_liangliang的博客 1601

Vivado安装教程:多版本共存的配置技巧

详解Vivado安装教程中的多版本共存配置技巧,帮助用户在同一系统中管理不同版本的Vivado开发环境,提升开发效率与兼容性,适用于需要切换版本的FPGA开发者。

weixin_35257663的博客 1774

bash shell 的一些主要特性

         bash shell 是可用于 Linux 的几个 shell 之一,也被称为 Bourne-again shell,是根据一个早期的 shell (/...

Linux云计算数据自学 967

2023-07-04 Fast-Lio论文中公式(6)与BCH公式中近似雅可比公式的一致性推导

将(1)式代入(6)式,就有。

wmorries的博客 475

Linux--shell特性

1、扩展 每次输入命令行按下Enter键是,bash都会在执行命令之前对文本进行多重处理。例如*在shell中被识别为多种意思。产生这个结果的处理过程称为扩展(expansion)。有了扩展功能,在输入内容后,这些内容将在shell对其执行之前被扩展成其它内容。 例如:echo是shell的一个内置命令,它执行的任务是吧文本参数内容打印到标准输出。 传递给echo的任何参数都将显示出来,但不是所...

贝勒里恩的博客 1197

深入解析MOS管电容特性:从基础理论到高频应用

本文深入解析了MOS管的电容特性,从基础物理结构出发,详细拆解了栅氧电容、重叠电容和结电容的成因与影响。文章重点探讨了电容值随工作状态变化的非线性特性,并分析了其在CMOS高频开关电源、射频电路等应用中的关键作用,包括开关损耗、米勒效应、信号完整性挑战以及如何将电容特性转化为可控元件(如MOS变容管)的机遇。最后提供了从选型、仿真到PCB布局的实战设计指南。

weixin_29278805的博客 381

ESP8266+ITR8307实战:如何用反射式光电管实现5cm远距离检测(附避坑指南)

本文详细介绍了如何利用ESP8266的ADC功能与ITR8307反射式光电管,通过调制解调、硬件电路优化及软件同步采样策略,实现5cm稳定远距离检测。文章提供了完整的硬件设计、代码实现与调优避坑指南,有效解决了环境光干扰与信号衰减难题,适用于智能车、自动化等需要可靠非接触检测的项目。

rgv234567的博客 263

linux的shell特性,bash的各种特性

我们知道当我们用鼠标点击,或输入一个命令,系统就玩帮我们完成一个任务,那么当我们点击一个链接时,系统由是如何知道要去完成相应的操作呢?这是因为通过shell来完成的。那么什么是shell呢?shell就是用户和操作系统之间的一个接口,通过这个接口shell接受来自用户的命令,并调用相应的应用程序来呼叫kernel来处理相应的工作。在linux系统上面存放着多种类型的shell,这些shell存放在...

weixin_31879641的博客 199

【数据集】全球陆地表面反照率Albedo

【数据集】全球陆地表面反照率Albedo

WW、forever的博客 1453

Linux shell特性简介

本文介绍了Linux Shell的六大基础特性,包括:1.补全功能(命令补全和路径补全),通过TAB键实现;2.常用快捷键(如Ctrl+C终止进程、Ctrl+D退出等);3.命令历史记录与调用方法;4.命令别名设置与使用方法;5.标准输入/输出重定向操作;6.管道功能的基本用法。这些特性能够显著提高Linux环境下的操作效率,适合初学者了解和掌握基本Shell操作技巧。文章还提到了部分高级用法,并建议读者自行探索更多功能。

weixin_64180565的博客 1799

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Linux shell特性

cat 0< filename.txt 等同于 cat < filename.txt == cat filename。通常这种写法会用在shell脚本或者不需要交互式编辑文件的场景,在企业部分配置文件参数时,经常使用。string指定匹配的字符率进行执行,如果这个字符串匹配到多个,则执行最近一次的命令。Is> filename.txt 等同于 Is 1>filename.txt。/etc/profile,然后source/etc/profile让其生效。ctrl+u 删除光标前面的字符。

2501_92309055的博客 382

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Linux系统中的Bash Shell有哪些特性?

Bash(Bourne Again SHell)是Linux系统中最常用的一种Shell,它是Bourne Shell(sh)的增强版本。Bash Shell 提供了许多强大的特性和功能,使其成为系统管理员和开发人员的首选工具。

qq_33240556的博客 720

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

linux shell 生命周期,linux中的bash shell的特性

linux中的bash shell特性(基础)Shell也称命令行解释器,是我们对linux进行操作最直接的接触的脚本,所以说这对我们的今后的学习过程中非常重要。当然,linux这种功能强大的操作系统,不可能只有一个shell,我们可以cat一下/etc/shells/,就会发现我们的linux有好多shell,[root@localhost~]#cat/etc/shells/bin/sh/...

weixin_39895096的博客 365

linux_shell_4_shell特性

        去年的这个时候,我曾经写过一些关于shell特性的文章,下面是第3篇:linux_shell_3_shell变量特性。 今天我们继续来学习一些关于 Linux shell的内容。 【1】shell         在用户登录到系统后,系统会给用户分配一个默认的shell,用户通过这个shell来与系统进行交互。我们可以通过环境变量SHELL来查看 用户登录到系统后获取的sh...

weixin_34392435的博客 151

linux_shell_2_shell 中的变量特性

  我们知道,linux/unix下shell作为用户与操作系统,或者说shell作为人与计算机之间的接口,详细的了解shell所支持的各项功能,对 用户操作系统是一件有必要的事情。这里我说一些我在使用的过程中发现的一些有意思的shell变量特性。 一、简单变量 1、“ 和 \ 以及 ' 的转义作用   在linux的shell使用过程中,如果一行命令太长我们可以使用 \ 来转义Ente...

weixin_34357962的博客 109

linux_shell_1_shell 特性简单介绍

shell的特性 1、 解释用户输入的命令,并将结果返回给用户 2、 shell是用户与系统之间的接口程序 Tip: 类似于 windows下的批处理的command.com 一、查看linux支持的shell /etc/shells 文件保存shell的种类 echo $SHELL 用来查看当前使用的shell类型 可以进入到其他shell中进行操作,例如 /bin/csh 就可...

weixin_34260991的博客 110

Linux-shell篇之bash特性

bash特性说明: shell:外壳 GUI:Gnome,KDE,Xfce CLI:sh,csh,ksh,bash(最全最强大),tcsh,zsh(没怎么推广) 1.1、命令历史: 查看命令历史:history -c:清空命令历史 -d:删除指定位置的命令 –history -d 500 3:第500行开始删除3行 -w:保存命令历史至历史文件中 1.2、命令历史的使用技巧: !n:执行命令历史中...

yaoyujie157的博客 311

linux中的bash shell的特性

linux中的bash shell特性(基础)Shell也称命令行解释器,是我们对linux进行操作最直接的接触的脚本,所以说这对我们的今后的学习过程中非常重要。当然,linux这种功能强大的操作系统,不可能只有一个shell,我们可以cat一下/etc/shells/,就会发现我们的linux有好多shell,[root@localhost~]#cat/etc/she...

weixin_34257076的博客 176

Linux基础之bash shell介绍及基本特性

今天继续讲Linux基础知识,内容是关于bash shell的。分享以下bash shell的相关知识,例如基本特性等。 1.8)bash shell的介绍 1.8.1)什么是bash shell  概括地讲就是bash shell是一个命令解释器,与内核进行交互。  bash shell是一个命令解释器,它在操作系统的最外层,负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给...

weixin_34248118的博客 236

linux的shell特性,linux

4.5Mhttp://www.starbase-929.net/media/Calibre%20Library/Ken%20O.%20Bartch/Linux%20Shell%20Scription%20With%20Bash%20(1778)/Linux%20Shell%20Scription%20With%20Bash%20-%20Ken%20O.%20Bartch.pdfstarbase-9...

weixin_39839968的博客 83
上一篇: 在Ubuntu下硬盘操作指令
下一篇: CM的资料整理
小元宝
博客等级 码龄25年 25粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值