导航:首页 > 净水问答 > bashshell过滤r

bashshell过滤r

发布时间:2023-04-11 11:31:32

『壹』 linux中设计一个shell脚本程序可以接受命令行输入的参数执行相应的菜单命令

之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互。
bash shell提供了命令行参数添加在命令后面的数据值)、命令行选项修改命令行为的单字符值)和直接读取键盘输入。
1、命令行参数
向shell脚本传递数据的最基本方式是使用命令行参数。
1)读取参数
读取输入的参数的变量为位置参数,位置参数通过标准数字表示,
其中$0为程序名称,$1为第一个参数,$2为第二个参数,依次类推,直到$9为第九个参数。
shell脚本自动将命令行参数赋值给各个位置变量。
同时输入多个参数可以是数值也可以是字符串)时,必须使用空格分隔要想在参数值中包含空格,就必须使用单引号或双引号)
当参数多于9个后,必须在shell脚本内使用大括号将变量括起来,如${10}。从而可以使用任意个参数。
2)读取程序名称
传递给变量$0的字符串实际上是程序的路径根据调用方法决定是相对还是绝对路径)。
使用basename命令可以去掉路径前缀,只获得程序名称名字中不 可以有空格)。
3)测试脚本
当脚本认为应该包含参数,却实际上没有数据时,就会出错。
好的方法是对参数进行检查来保证使用参数前确实存在数据,可以使用-n参数来检查。
例子:if [ –n “$1” ] then .. else .. fi
2、特殊的参数变量
用于跟踪命令行参数
1)参数计数
使用特殊变量$#测试执行脚本时包含的命令行参数个数。脚本中任何位置都可以 使用$#
例子:if [ $# –ne 2 ] 即可测试参数个数
可以使用${!#}来返回最后一个命令行参数当无参数时,$#为0,而${!#}为程序名)
2)获取所有数据
变量$*将命令行中提供的所有参数作为一个单词处理,它将多个参数看成 一个参数。
变量$@将命令行中提供的所有参数作为同一个字符串中的多个单词处理。 允许对其中的值进行迭代一般使用for),分隔开不同参数
3、移位
shift命令能够改变命令行参数的相对位置。默 认将每个参数变量左移一个位置变量$0不变,把$1丢弃,注意不可以恢复了!)
在不清楚参数数目情况下,这是一个迭代参数的好办法。
可以为shift提供一个参数,来实现多位移变化。
4、处理选项
选项是由破折号引导的单个字母,用于更改命令的行为。
1,找出选项
1)处理简单选项
可以使用处理命令行参数相同的方法处理选项,抽取时使用case语句进行判断是否符合选项格式。
2)从参数中分离选项
同时使用选项和参数时,可以使用--指示选项列表的结束。发现--后,shell就知道后面的是普通参数了,停止使用case处理选项。
3)处理带值的选项
选项后紧跟参数值,一种方法是在case中对应选项后使用shift和读后一位参数的方法处理。更好的方法如 下:
2,使用getopt命令
getopt命令在处理选项和参数时非常方便。它对参数进行重新组 织,以便于解析
1)命令格式
getopt可以接受任森余意形此察滚式的选项和参数列表,并自动将它们转换为适当的格式。
命令格式为: getopt options optstring parameters
选项字符串(opstring)用于定义命令行中的有效选项字母,以及哪些选项字母需要参数值。
2)脚本中使用getopt
需要使用set命令将现有的命令行选项和参数替换为getopt命令生成的 格式化形式。
需要将原始脚本命令行参数送给getopt命令,然后将getopt命令输出送给set命令,如下:set – `getopts –q ab:cd “$@”`
但是getopt命令不能没猜很好的处理带有空格的参数值,它将空格解析为参数分隔符,而不是将双引号引起来的两个 值合并成一个参数。解决办法如下:
3)更高级的getopts命令
getopts命令顺序的对现有的shell参数变量进行处理,每调用一次,只处理命令中检测到的参数中的一个。处理完所有参数后,以大于0的退出 状态退出。
非常适宜于在循环中解析所有命令行参数
格式为: getopts optstring variable
$optarg包含需要参数值的选项要使用的值,$optind包含getopts停止处理时在参数列表中的位置。
注意:当getopts处理时,会将选项前的-去掉,所以对应的case中不需要破折号。
好的特性:
1)可以在参数值中包含空格
2)选项字母和参数值中间可以没有空格
3)将在命令行中找到的未定义的选项都绑定为单一的输出——问号
5、标准化选项
有一些字母选项具有标准含义。最好按照标准含义定义选项意义
-a –c –d –e –f –h –i –l –n –o –q –r –s –v- x –y
6、获取用户输入
当需要在执行过程中获得执行脚本人员的输入,使用read命令
1)基本读取
read命令接受标准输入或其他文件描述符输入。读入后将数据放入 一个标准变量中。
-p 允许在read命令行中直接指定一个提示。
可以指定多个变量,也可以不指定将放置在reply环境变量中)
2)计时
使用-t指定一个计时器,计时数满还未输入,read返回一个非0的退出状态。
使用-n指定输入的字符个数,输入达到预定数目时,就自动结束输入
3)默读
使用-s使输入不显示在终端例如输入密码)
4)读取文件
最常用的方法是使用cat命令,并通过管道传给包含read的while语句。

『贰』 Linux相关使用介绍

Linux命令分为内部命令(shell自带的命令)和外部命令(不是shell自带的命令,由用户安装),怎么鉴别是内部命令和外部命令呢?可以通过type命令来鉴别
什么是shell呢?shell是一个程序,常用的有bash shell,平时我们通过用户名和密码登录到linux,其实就是登录到bash shell程序,通过bash shell来操作linux内核

命令执行流程

那岂不是说使用外部命令效率会很慢吗?
其实一点都不慢,它会去PATH环境变量设置的一堆目录中查找

cd is a shell builtin 表示内部命令
ifconfig is hashed (/usr/sbin/ifconfig) 表示外部命令

cd命令切换文件夹
现在我们cd /usr/sbin

通过cat命令查看文件内容
通过cat ifconfig来查看ifconfig,发现是乱码文件

file命令查看文件类型
输入file ifconfig

从输出信息可以看出它是一个二进制可执行文件

whereis命令查看文件位置

find / -name jdk

echo命令用户打印信息,相当于java中的system.out.println

可以使用回车查看下一行、空格查看下一页、q退出

一般使用man查看外部命令,help查看内部命令

查看linux下的应用和应用的进程号

当我们在这个窗口中输入kill -9 1593的话,另外一个正在编辑文件的进程就会退出

在前面我们已经讲过,bash shell程序在执行命令的一个过程及原理,对于外部命令,它会去PATH这个环境变量中查找执行命令所在的路径,当然在去PATH中寻找之前会先去hash表中查找这个命令有没有执行过,执行过的话会记录在hash表中,则此次查找只需从hash表中就可以很方便的找到

查看分区信息 -h 表示文件大小后面会显示文件大小

查看文件的使用情况

使用man ls 查看ls命令的相关介绍
-a:可以查看隐藏文件
-l:以长列表的形式展示文件列表信息

第一位 -:表示文件,d表示文件夹,b表示块设备文件,c表示字符设备文件,p表示命令管道文件,s表示套接字文件, 从第二位开始往后数九位表示属主权限(每三位一组 rwx:读、写、执行),第11位表示的点表示分隔符,点后面的数字表示文件有几个硬连接,第一个root代表属主名,第二个root代表这个第一个root所在的组织,接下来的5表示文件大小,5后面的日期表示文件最后一次修改的时间, 1.txt代表的文件或文件夹的名称
小结:

切换文件目录
cd 文件路径
cd:切换到家目录
cd ~:回到家目录(也就是家目录)
cd ..:回到上一级目录

创建目录
mkdir 目录名
mkdir -p 目录名,级联创建目录

cp 被拷贝的文件(可以是路径加文件名) 拷贝到哪个位置

复制目录使用
cp -r 被拷贝的目录 目标位置

移动命令
mv 被移动的文件 目标位置+目标文件名

rm 文件名(此中方式的删除需要再输入 yes)
rm -f 文件名,无提示直接删除
rm -rf 文件夹

ln命令默认创建的是硬连接

ln profile a:将a硬连接到profile文件上,他们底层共用一个文件,删除他们之中任何一个
对另外一个没有影响,同时你也可以使用 ll -i命令查看文件编号

ln -s profile a:将a软连接到profile文件,当你访问a的时候会去访问profile,profile再访问底层文件,当将profile删除了之后a就无法访问了

一致时间、创建新文本
touch 已存在的文件:会将文件的访问时间、更新时间、改变时间(即上面stat中介绍的三个时间)变成一致
touch 不存在的文件:会创建一个新的文本

cat命令查看文件内容
cat 1.txt:查看单个文件内容
cat 1.txt 2.txt:查看多个文件

more 1.txt:以分页的形式查看文件内容,按空格:下一页,回车:下一行(注意它不能回看,回看的话只能用鼠标回轮)

less 1.txt:使用空格下一页, b看上一页, 回车看下一行
注意less的话会把整个文件内容加载到内存,如果文件比较大的话,建议使用more命令查看

head命令默认查看文件前10行内容, head 1.txt
head -5 1.txt:查看文件前5行的内容

tail命令默认查看文件后10行的内容 tail 1.txt
tail -5 1.txt:查看文件后5行内容
tail -f 1.txt:实时查看文件增量内容

cat b.txt | head -3:管道左边的命令会以输出流的形式交给管道右边的命令,管道右边以输入流的形式接收并且拼到命令的右边

注意:ls -l 不能接受前面的输出流,这个怎么办呢?可以通过xargs命令

vi文本编辑器末行模式的操作

set nu(number的缩写): 设置行号
set nonu(nonumber的缩写):取消行号
set readonly:设置为只读

n:往下查找
N:往上查找

n:往上查找
N:往下查找

一般我们会在/etc/profile文件中设置一些环境变量,但是在设置的时候可能没有记住目录,这时候我们可以使用如下方式

效果

格式 :s/str1/str2/gi
/ : 临近s命令的第一个字符边界字符,也可以是 @或#
g : 一行内全部替换
i : 忽略大小写

范围
n:行号
. :当前光标行
+n :偏移n行
-3
%:全文

全部删除 1,$d

删除前三行

删除倒数第2行

光标挪到最后一行 按下小写的p
效果图

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特殊字符、及这些特定字符的组合组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑。

\ :转义字符
. :匹配任意单个字符
[1249a] :匹配中括号中任意字符
[^12] :匹配中括号中任意非1和2的字符
[a-k] :匹配中括号中任意a~k中的一个字符
^ :行首
$ :行尾
<abc> :单词首尾边界(匹配单词abc)
| :连接操作符
(,) : 选择操作符
\n :反向引用

? :匹配0到1次

在Linux中通过grep命令使用正则表达式来匹配信息

f :选择显示的列
s :不显示没有分隔符的行
d :自定义分隔符

n :按数值排序
r :倒序
t :自定义分隔符
K :选择排序列
u :合并相同行
f :忽略大小写

sed:行编辑器,以行为单位进行处理,可以将数据进行替换、删除、新增、选取等特定工作

sed [options] 'Command' file ...

-n :静默模式,不再默认显示模式空间(内存)中的内容
-i :直接修改原文件
-e SCRIPT :可以同时执行多个脚本
-f /PATH/TO/SED_SCRIPT
-r :表示使用扩展正则表达式

d :删除符合条件的行
p :显示符号条件的行
a \string :在指定的行后面追加新行,内容为string
\n :可以用于换行
i \string :在指定的行前面添加新行,内容为string
c :取代,c的后面可以接字符串
s /pattern/string/修饰符:查找并替换。默认只替换每行中第一次被模式匹配到的字符串
g :行内全局替换
i :忽略字符大小写
s///:s###,s@@@
(),\1,\2

sed "2p" ctxt
但是在执行下面的操作的时候文本中的内容都显示出来了,它的原理是,打印匹配的行,以及文本中所有的内容

注意:它删的是内存中的数据,而不是目标文件

sed -i "3d" ctxt

它的原理是先把内存中的第3行数据删除,然后再把内存中的数据写回原文件,这时原文件中的第三行就没有了

使用变量的形式

awk是一个强大的文本分析工具。
相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
简单来说awk就是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理。

awk -F '{pattern + action}' {filenames}
支持自定义分隔符,默认是以空格分隔的
支持正则表达式匹配
支持自定义变量,数组 a[1] a[tom] map(key)
支持内置变量
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
支持函数
print、split、substr、sub、gsub
支持流程控制语句
if、while、do/while、for、break、continue

练习题
passwd文件内容解读:
passwd文件中每行由7个字段组成,字段与字段之间由:分隔,第一个字段代表用户名,第二个字段表示用户对应的加密后的密码,第三个字段表示userId,第四个字段表示groupId,第五个字段表示对用户的描述,第六个字段表示用户的家目录,第七个字段表示的是这个用户默认使用的shell

其中$0表示整行

统计报表:合计每人1月工资, 0:manager,1:worker

将awk后面的内容封装到一个文件中(封装的脚本要遵循一定的格式)

qqq文件的内容格式

『叁』 Bash shell 特点总结

自学Linux的过程中做了一点小总结,因此写出来和大家分享一下,希望能共同进步!

Bash shell的特点:

1、 命令的自动补齐:Tab键

2、 命令的顷哪历史记忆功能:上下键;!+数字可以自动找出在history中的相应命令并且执行;!+string可以自动找到最近一个以string开头的命令并且执行;!$指的是上一个命令的最后一个参数;!!指的是上一个命令,因为在脚本中不能进行翻页,所有常作为脚本命令执行,ctrl+R可以搜索历史命令。

3、 别名功能:alias可以查看别名;unalias cp取消别名;~username/.bashrc可以进行永久别名的设置;\cp –rf /etc/hosts表示忽略别名

4、 快捷键:^R搜索历史命令;^D登出系统;^A将光标移到命令开始;^E将光标移到命令结尾;^K将光标移到中间删除后半部命令;^U将光标移到中间删除前部分命令;^Y撤销上个操作

5、 前后台作业控制 :命令之后加一个&表示将工作提交到后台执行;命令前加一个nohup可以让该命令在终端关闭之后还可以执行;^C杀死前台正在运行的任务;^Z,将前台工作扔到后台去执行;bg展示后台正在运行的工作,也可以用jobs;fg表示将后台运行的工作调到前台运行;kill %+数字表示杀死后台某一个作业

6、 输入输出重定向:0表示标准输入;1表示标准输出;2表示标准错误,也就是错误输出;>表示写入某一个文件,>>表示追加写入某一个文件;2>&1:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1,即和1重定向的文件系统上的位置是一样的; cat << EOF > file:EOF是一个从标准输入传递命令给cat的标志,执行结束的命令输出到file文件中保存

7、 Tee管道,相当于一个三通,可以在特定地方截取管道命令的输出信息。

管道文件不同于常用文件,管道文件就跟水一样是一个动态的文件,每个时间点打开管道文件查看都能看到不一样的东西,而常用文件只要不进行更改都是一样雀猛码的内容,另外管道文件都遵循一个原则:先进先出后进后出,顾名思义就是先被管道接受的东西首先被记录。

另:

关于命名知含管道与匿名管道的区别:创建命名管道:mkfifo +管道名字

8、 命令排序:

不具备逻辑判断能力:分号

具备逻辑判断能力:&& 和 ||

注意:

Command &  后台执行

Command &>/dev/null  混合重定向

Command1 && Command2  命令排序,具备逻辑判断能力

9、 shell通配符(元字符,即表示的不是本意)

*匹配任意多个字符

?匹配任意一个字符

[]表示匹配括号内的任意一个字符:[abc]表示匹配abc中的任意一个,而[^abc]表示除了abc之外的任意一个字符。

(command)在子shell中执行命令

{}将几个元素括起来表示一个集合,可以用来批量创建和删除文件

\ 转义字符,让元字符回归本意

『肆』 如何使用bash shell 实现连个文件的内容对比

用猛御diff 是比较方便枝睁岩的但是 输出不是很容易看懂 你也可以用PSPad 或者用file diff 之类的小工具,早唤 不过这些工具只能在windows 下用

『伍』 在 bash shell 环境下,当一命令正在执行时,按下 ctrl+z 会出现什么情况

1、当TTY是物理设备时,选择Ctrl+C作为方便的组合键来生成信号。该信号是SIGINT,它告知当前进程终止。

由于终端窗口是模拟的TTY,因此该击键组合(以及许多其他组合)已保留并在模拟中复制。请注意,是模拟的终端窗口。Bashshell是在该TTY中运行的程序。

可以轻松地看简此到已分配给Ctrl+C和Ctrl+V的功能。假设键入以下命令,然后按“Enter”。

『陆』 用Linux Shell 脚本过滤IP地址192.168.0.100/29中的100和29,应该怎么写语句

过滤出来是几个意思。
得到
192.168.0.100/29 还是
192.168.0.
还是
所有以100/29结尾的ip

『柒』 求Bash Shell脚本,判定文件是否存在。

elif ....; then else ....fi大多数情况下,可以使用测试命令来对条件进行散搏测试。比如可以比较字符串、判断文件是否存在及是否可读等等… 通常用" [ ] "来表示条件测试。注意这里的空格很重要。要确保方括号的空格。 [ -f "somefile" ] :判断是否是一个猛掘尘文件 [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限 [ -n "$var" ] :判断$var变量是否有值 [ "$a" = "$b" ] :判断$a和$b是否相等 -r file 用户可读为真 -w file 用户可写为真 -x file 用户可执行为真 -f file 文件为正规文件为真 -d file 文件为目录为真 -c file 文件为字符特殊文件为真 -b file 文件为块特殊文件为真 -s file 文件大小非0时为真 -t file 当文件描述符(默认为1)指定的设备为终端时为真 ######################################################### 含条件选择的shell脚本 对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策枝禅任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。基本的if条件命令选项有: -eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ]) -ne —比较两个参数是否不相等 -lt —参数1是否小于参数2 -le —参数1是否小于等于参数2 -gt —参数1是否大于参数2 -ge —参数1是否大于等于参数2 -f — 检查某文件是否存在(例如,if [ -f "filename" ]) -d — 检查目录是否存在 几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。 ################################################################## 判断文件是否存在 #!/bin/sh today=`date -d yesterday +%y%m%d` file="apache_$today.tar.gz" cd /home/chenshuo/shell

『捌』 win10安装了bash shell后,有什么有趣的用法

rm -r *.exe 递归地删友察掉所有exe文件

rm -r *.* 进化版 删信逗掉所好坦茄有文件

『玖』 shell 字符串过滤问题

read-p"pleaseinput:"str
echo$theFile|sed-r's/(.*_)[^_]+$/1'$str'/g'

『拾』 如何理解 bash shell

要理解bash shell,首先得分别理解桐丛bash和shell。
先说shell,shell就是一个“壳”,是操作系统(内核)与用户之间的桥梁,充当命令解释器的作用,将用户输入的命令翻译给系统执行。与Windows下的DOS一样,提供一些内建命令供用户使用局喊樱,可以用这些命令编写shell脚本来完成复杂的工作。
再说bash,目前有几种流行的shell有:tcsh, csh, bash, ksh,各有什么联系与渗含区别我这里就不多讲了,相信你可以在网上查到相关资料(包括bash是指 Bourne-again shell),但我要说的是目前很多linux发行版里默认带的都是bash shell。

阅读全文

与bashshell过滤r相关的资料

热点内容
废水中铁含量标准 浏览:765
地底污水管风水怎么化解 浏览:987
如何提高环氧树脂固化物的耐热性 浏览:192
室外监控如何防水处理 浏览:21
一体化超滤膜成套设备价格 浏览:976
烟嘴过滤器堵了怎么办 浏览:372
污水处理加二氧化氯 浏览:877
滤芯上的标签如何清除 浏览:449
大众宝来6at变速箱滤芯在哪里 浏览:789
哈尔滨道外污水处理厂 浏览:115
含煤废水的主要成分 浏览:156
为什么污水井喷 浏览:617
广汽传祺为什么一万公里换汽油滤芯 浏览:857
万和净水器提示保养需要换什么 浏览:227
反渗透膜哪个品牌好 浏览:695
练焦工业废水设计回用规范 浏览:212
乙二醇是蒸馏水吗 浏览:320
为什么水族馆鱼缸里的水没有水垢 浏览:425
葡萄糖酸钠废水分散剂 浏览:352
嘉兴污水排放标准最新 浏览:328