前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux笔记09

Linux笔记09

原创
作者头像
用户7271996
发布2023-03-09 16:27:35
2880
发布2023-03-09 16:27:35
举报
文章被收录于专栏:cc

字符转换命令

tr col join paste expend

tr可以用来删除一段信息当中的文字,或者进行文字信息的替换

tr -d str 删除信息当中的str这个字符

-s取代掉重复的字符

col

-x 将tab键转换成对等的空格键

expend

将tab转换成8个空格键

-t 后接数字n,自定义将tab键转换成n个空格

join

-tjoin预设以空格符分隔数据,并且比对第一个字段的数据,如果两个档案相同,则将两个数据联成一行,且第一个字段放在第一个

-i忽略大小写的差异

-1这个是数字1,代表第一个档案要用那个字段来分析的意思

-2第二个档案要用那个字段来分析的意思

paste

-d后面可以接分隔字符

-如果file部分写成-

split

-b后面接欲分割的档案的大小,可加单位 split -b 200 filename grep

-l以行数来进行分隔

参数代换xargs

xargs command

-e是eof的意思。后面可以接一个字符串,当xargs分析到这个字符串时,就会停止工作

-p在执行每一个命令的参数时,都会询问用户的意思

-n后面接次数,每次command命令执行时,要使用几个参数

当xargs后面没有接任何命令时,默认为echo输出

12.3 善用判断式

12.3.1 利用test命令的测试功能-pg395

测试的参数 代表意义

1.关于某个文件名的【文件类型】判断,如test -e filename

-e 该【文件名】是否存在(常用)

-f 该【文件名】是否存在且为文件(file)(常用)

-d 该【文件名】是否存在且为目录(dictionary)(常用)

-b 该【文件名】是否存在且为一个 block device 设备

-c 该【文件名】是否存在且为一个 character device 设备

-S 该【文件名】是否存在且为一个socket文件

-p 该【文件名】是否存在且为一个FIFO(pipe)文件

-L 该【文件名】是否存在且为一个链接文件

2.关于文件的权限检测,如test -r filename

-r 检测该文件名是否存在且具有【可读】的权限

-w 检测该文件名是否存在且具有【可写】的权限

-x 检测该文件名是否存在且具有【可执行】的权限

-u 检测该文件名是否存在且具有【SUID】的属性

-g 检测该文件名是否存在且具有【SGID】的属性

-k 检测该文件名是否存在且具有【Sticky bit】的属性

-s 检测该文件名是否存在且为【非空文件】

3.两个文件之间的比较,如test file1 -nt file2

-nt (newer than)判断file1是否比file2新

-ot (older than)判断file1是否比file2旧

-ef 判断file1与file2是否为同一文件,可用在判断hard link的判定上。主要意义在判定,两个文件是否均指向同一个inode

4.关于两个整数之间的判定,如test n1 -eq n2

-eq 两数值相等(equal)

-ne 两数值不等(not equal)

-gt n1大于n2(greater than)

-lt n1小于n2(less than)

-ge n1大于等于n2(greater than or equal)

-le n1小于等于n2(less than or equal)

5.判定字符串的数据

test -z string 判定字符串是否为0?若string为空字符串,则为true

test -n string 判定字符串是否非为0?若string为空字符串,则为false。注:-n亦可忽略

test str1 == str2 判定str1是否等于str2,若相等,则返回true

test str1 != str2 判定str1是否不等于str2,若相等,则返回false

6.多重条件判定,例如:test -r filename -a -x filename

-a (and)两条件同时成立。例如tset -r file -a -x file,则file同时具有r与x权限时,才返回true

-o (or)两条件任何一个成立。例如tset -r file -o -x file,则file同时具有r与x权限时,就可返回true

! 反相状态,如test ! -x file,当file不具有x时,返回true

由于root在很多权限的限制上面都是无效的,所以使用root执行这个脚本时,常常会发现与ls -l观察到的结果并不相同。

12.3.2 利用判断符号-pg397

还可以利用判断符号【[]】(就是中括号)来进行数据的判断。

注意:中括号两端需要有空格符来分割,比如: [ -z $() ]

在中括号[]内的每个组件都需要有空格来分割;

在中括号内的变量,最好都以双引号括号起来;

在中括号内的常数,最好都以单或双引号括号起来。

12.3.3 shell脚本的默认变量-pg399

比如:

/path/to/scriptname opt1 opt2 opt3 opt4

(第一列是$0,第二列是$1,以此类推)

$# : 代表后接的参数【个数】,以上表为例这里显示为【4】;

$@ : 代表【“$1"”$2"“$3"”$4"】之意,每个变量是独立的(用双引号括起来);

$* : 代表【“$1c$2c$3c$4c”】,其中c为分割字符,默认为空格,所以本例中代表【“$1 $2 $3 $4”】之意。

注意:shift可以移动变量,而且shift后面可以接数字,代表拿掉前面几个参数的意思。

12.4 条件判断式

12.4.1 利用if…then-pg401

单层、简单条件判断式

if [ 条件判断式 ];then

当条件判断式成立时,可以进行的命令工作内容;

fi <==将if反过来写,就成为fi,结束if的意思。

- && 代表AND

- || 代表OR

多重、复杂条件判断式

#一个条件判断,分成功执行与失败执行(else)

if [ 条件判断式 ];then

当条件判断式成立时,可以进行的命令工作内容;

else

当条件判断式不成立时,可以进行的命令工作内容;

fi <==将if反过来写,就成为fi,结束if的意思。

如果考虑更复杂的情况:

#多个条件判断,分多种不同情况执行(if...elif...elif...else)

if [ 条件判断式一 ];then

当条件判断式一成立时,可以进行的命令工作内容;

elif [ 条件判断式二 ];then

当条件判断式二成立时,可以进行的命令工作内容;

else

当条件判断式一与二均不成立时,可以进行的命令工作内容;

fi <==将if反过来写,就成为fi,结束if的意思。

学一个有趣的命令

netstat

这个命令可以查询到目前主机开启的网络服务端口(service ports),利用【netstat -tuln】来获取目前主机启动的服务。

几个常见的端口与相关网络服务的关系:

80 : WWW

22 : ssh

21 : ftp

25 : mail

111 : RPC(远程过程调用)

631 : CUPS(打印服务功能)

12.4.2 利用case…esac-pg405

case $变量名称 in <==关键字是case,还有变量前有美元符号。

"第一个变量内容") <==每个变量内容建议用双引号括起来,关键字则为右圆括号。

程序段

;; <==每个内别结尾使用两个连续的分号来处理。

"第二个变量内容") <==每个变量内容建议用双引号括起来,关键字则为右圆括号。

程序段

;; <==每个内别结尾使用两个连续的分号来处理。

*) <==最后一个变量内容都会用*来代表所有其他值。

不包含第一个变量内容与第二个变量内容的其他程序执行段。

exit 1

;;

esac <==将case反过来写,就成为esac,结束case的意思。

一般来说,使用【case 变 量 i n 】 这 个 语 法 时 , 当 中 的 那 个 【 变量 in】这个语法时,当中的那个【 变量in】这个语法时,当中的那个【变量】大致有两种获取方法:

直接执行式:例如上面提到的,利用【 script.sh variable 】的方式来直接给予 $1 这个变量的内容,这也是在 /etc/init.d 目录下大多数程序的设计方式;

交互式:通过read这个命令来让用户输入变量的内容。

12.4.3 利用利用function功能-pg406

function fname(){

程序段

}

注意:因为shell脚本的执行方式是从上到下、从左到右,因此在shell脚本当中的function的设置一定要在程序的最前面。

function也是拥有内置变量的,它的内置变量与shell脚本很类似,函数名称代表示 $0 ,后续接的变量也是以 $1、$2…来替换的。

12.5 循环(loop)

12.5.1 while do done、until do done(不定循环)-pg408

while [ condition ] <==中括号内的状态就是判断式

do <==do是循环的开始

程序段落

done <==done是循环的结束

while是【当condition条件成立时,就进行循环,直到condition的条件不成立才停止】

until [ condition ] <==中括号内的状态就是判断式

do <==do是循环的开始

程序段落

done <==done是循环的结束

until与while相反,它是【当condition条件成立时,就终止循环,否则就持续进行循环的程序段】

12.5.2 for…do…done(固定循环)-pg409

for这种语法,则是【已经知道要进行几次循环】的状态

for var in con1 con2 con3 ...

do

程序段

done

这个 $var 的变量内容在循环工作时:

第一次循环时,$var的内容为con1;

第二次循环时,$var的内容为con2;

第三次循环时,$var的内容为con3;

$(seq 1 100) # seq为sequence(连续)的缩写之意

还可以使用 {1…100}来替换$(seq 1 100),都是从1到100连续取值的含义。

12.5.3 for…do…done的数值处理-pg411

for (( 初始值;限制值;赋值运算 ))

do

程序段

done

for括号内的含义:

初始值 : 某个变量在循环当中的起始值,直接以类似i=1设置好;

限制值 : 当变量的值在这个限制值的范围内,就继续进行循环,例如i<=100;

赋值运算 : 每做一次循环,变量也变化,例如i=i+1。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档