ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

shell实战总结

2022-01-29 17:30:20  阅读:137  来源: 互联网

标签:实战 总结 存在 shell 字符 字符串 cut FILE 如果


shell_01

文件表达式

if [ -f file ] 如果文件存在
if [ -d … ] 如果目录存在
if [ -s file ] 如果文件存在且非空
if [ -r file ] 如果文件存在且可读
if [ -w file ] 如果文件存在且可写
if [ -x file ] 如果文件存在且可执行

整数变量表达式

if [ int1 -eq int2 ] 如果int1等于int2
if [ int1 -ne int2 ] 如果不等于
if [ int1 -ge int2 ] 如果>=
if [ int1 -gt int2 ] 如果>
if [ int1 -le int2 ] 如果<=
if [ int1 -lt int2 ] 如果<

字符串变量表达式

if [ $a = $b ] 如果string1等于string2
字符串允许使用赋值号做等号
if [ $string1 != $string2 ] 如果string1不等于string2
if [ -n $string ] 如果string 非空(非0),返回0(true)
if [ -z $string ] 如果string 为空
if [ $sting ] 如果string 非空,返回0 (和-n类似)

s​h​e​l​l​中​条​件​判​断​i​f​中​的​-​z​到​-​d​的​意​思

[ -a FILE ] 如果 FILE 存在则为真。
[ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真。
[ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真。
[ -d FILE ] 如果 FILE 存在且是一个目录则为真。
[ -e FILE ] 如果 FILE 存在则为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则为真。
[ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真。
[ -h FILE ] 如果 FILE 存在且是一个符号连接则为真。
[ -k FILE ] 如果 FILE 存在且已经设置了粘制位则为真。 [
-p FILE ] 如果 FILE 存在且是一个名字管道(F如果O)则为真。
[ -r FILE ] 如果 FILE 存在且是可读的则为真。
[ -s FILE ] 如果 FILE 存在且大小不为0则为真。
[ -t FD ] 如果文件描述符 FD 打开且指向一个终端则为真。
[ -u FILE ] 如果 FILE 存在且设置了SUID (set user ID)则为真。
[ -w FILE ] 如果 FILE 如果 FILE 存在且是可写的则为真。
[ -x FILE ] 如果 FILE 存在且是可执行的则为真。
[ -O FILE ] 如果 FILE 存在且属有效用户ID则为真。
[ -G FILE ] 如果 FILE 存在且属有效用户组则为真。 [ -L FILE ] 如果
 FILE 存在且是一个符号连接则为真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it 
was last read则为真。
[ -S FILE ] 如果 FILE 存在且是一个套接字则为真。
[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more
 recently than FILE2,or 如果 FILE1 exists and FILE2 does not
则为真。
[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且
 FILE1 不存在则为真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的设备和节点号则为真。
[ -o OPTIONNAME ] 如果 shell选项 “OPTIONNAME” 开启则为真。
[ -z STRING ] “STRING” 的长度为零则为真。

位置参数

$0 这个程式的执行名字
$n 这个程式的第n个参数值,n=1..9
$* 这个程式的所有参数,此选项参数可超过9个。
$# 这个程式的参数个数
$$ 这个程式的PID(脚本运行的当前进程ID号)
$! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号)
$? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误)
$- 显示shell使用的当前选项,与set命令功能相同
$@ 跟$*类似,但是可以当作数组用

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的。

(1)其语法格式为:
cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file]

使用说明
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

主要参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除。

(2)cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢?

cut命令主要是接受三个定位方法:

第一,字节(bytes),用选项-b

第二,字符(characters),用选项-c

第三,域(fields),用选项-f

[ ] : [ condition ] 为判断符,其中的条件condition为真返回 0,假返回 1 。

echo : echo str 打印字符串 str (默认换行)

-eq : int1 -eq int2 是整数相等判断符,两边整数相等时返回真 0,否则返回假 1 。

$? : $ 符号用来引用变量的值,? 是一个特殊的变量,存储紧邻的前驱命令执行的返回值,$? 一般组合用来检查上一个命令执行结果的返回值。

exit : exit 0~255 ,用来返回自己的退出状态码,超过255的值 将被自动执行 模256的运算。

shell_02

在bash中,$( )与` `(反引号)都是用来作命令替换的

命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。

shell 扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令
$(( )) 可以 整数运算、进制转换、重定义变量值

sed -e 是可以在一行里执行多条命令

sed -e ‘s/wang/w/g;s/xu/x/g’ user.txt,

顺便说一下 's/wang/w/g;s/xu/x/g’的意思,s代表search,g是尽可能多的匹配,有多少替换多少,因而意思是将user.text文本中的wang 替换成w,xu 替换成x

字符通配

. 匹配任意单个字符
[ ] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即A-Z, a-z
[:lower:] 小写字母[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:]水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

1、字符集 [:与:]
2、排序符号 [.与.]
3、等价字符集 [=与=]

在这里插入图片描述

shell_03

tr命令

tr字符可以对来自标准输入的字符进行替换、压缩和删除,可以将一组字符编程另外一组字符,作用很强大。

tr  [option]  [char_set 1]  [char_set 2]
tr命令将“ set 1”中的字符集替换为“ set 2”。 

tr -c -d -s
-c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
-d 删除字符串1中所有输入字符。
-s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。

shell_04

指定 : 号分隔符,显示第一列

cut -d":" -f1 filename
cut -d: -f1 filename

getopts命令格式:getopts OPTSTRING VARNAME
OPTSTRING:告诉getopts会有哪些选项和参数(用选项后面加“:”来表示选项后面需要加参数)
VARNAME:保存getopts获取到的选项

getopts ahf: var
告诉getopts查找-a、-h、-f选项,其中f选项后面需要跟一个参数,获取到的选项都保存到变量var中
while getopts :hvf: o: varname #告诉getopts此脚本有-h、-v、-f、-o四个选项,-f和-o后面需要跟参数

OPTIND: getopts使用OPTIND作为索引,来处理下一个需要处理的参数,记录当前的状态。
OPTARG: 在上面的循环中,a,b两个参数后面各有一个冒号,冒号表示该输入的参数后面还有一个参数值,当getopts发现冒号后,会处理用户输入的参数值,这个参数值被保存在OPTARG中。

root@GO-EMAIL-1 ~]# sh 1.sh -ab foo
sh 1.sh -ab foo
-ab 第一个元素,OPTIND=1
foo 第2个元素, OPTIND=2
第3个元素为空 OPTIND=3
所以处理-a时,下一个是b,依然在处理第一个元素,所以打印
a=1
处理b时,下一个是foo,但foo不是参数SKIP掉了,下一个参数是空,optind=3
所以打印
b=3

在这里插入图片描述

重要

. 可以将另一个脚本放到执行脚本中运行

在执行脚本中加入
	. 导入的脚本名

shift n后,前n位参数都会被销毁(偏移)

在这里插入图片描述
在这里插入图片描述

关于cat << EOF语句的意思

cat<<EOF,以EOF输入字符为标准输入结束:
cat>filename,创建文件,并把标准输入输出到filename文件中,以ctrl+d作为输入结束:
cat>filename<<EOF,以EOF作为输入结束,和ctrl+d的作用一样:

如果重定向的操作符是<<-,那么分界符(EOF)所在行的开头部分的制表符(Tab)都将被去除。

basename命令只要是用于去除路径文件后缀部分的文件名或者目录名

1.basename 文件(目录) //删除路径最后一个"/“符号(包括”/")前面的所有内容
2.basename 文件或目录 后缀(后缀:可选参数,指定要去除的文件后缀字符串)

date 可以用来显示或设定系统的日期与时间。

-d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号; 
-s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号; 
-u:显示GMT; 
--help:在线帮助; 
--version:显示版本信息。

日期格式字符串列表

如果需要以指定的格式显示日期,可以使用“+”开头的字符串指定其格式

%H 小时(以00-23来表示)。 
%I 小时(以01-12来表示)。 
%K 小时(以0-23来表示)。 
%l 小时(以0-12来表示)。 
%M 分钟(以00-59来表示)。 
%P AM或PM。 
%r 时间(含时分秒,小时以12小时AM/PM来表示)。 
%s 总秒数。起算时间为1970-01-01 00:00:00 UTC。 
%S 秒(以本地的惯用法来表示)。 
%T 时间(含时分秒,小时以24小时制来表示)。 
%X 时间(以本地的惯用法来表示)。 
%Z 市区。 
%a 星期的缩写。 
%A 星期的完整名称。 
%b 月份英文名的缩写。 
%B 月份的完整英文名称。 
%c 日期与时间。只输入date指令也会显示同样的结果。 
%d 日期(以01-31来表示)。 
%D 日期(含年月日)。 
%j 该年中的第几天。 
%m 月份(以01-12来表示)。 
%U 该年中的周数。 
%w 该周的天数,0代表周日,1代表周一,异词类推。 
%x 日期(以本地的惯用法来表示)。 
%y 年份(以00-99来表示)。 
%Y 年份(以四位数来表示)。 
%n 在显示时,插入新的一行。 
%t 在显示时,插入tab。 
MM 月份(必要) 
DD 日期(必要) 
hh 小时(必要) 
mm 分钟(必要)
ss 秒(选择性) 

标签:实战,总结,存在,shell,字符,字符串,cut,FILE,如果
来源: https://blog.csdn.net/sinat_42884063/article/details/122728697

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有