学习shell,这一篇就够了(shell基础)-程序员宅基地

技术标签: 网络  运维  linux  服务器  centos  

在这里插入图片描述

目录
一、shell概述
二、shell脚本准备知识
三、条件判断
四、结尾

一、shell概述

1、什么是shell
shell是一种命令语言,是为使用者提供操作界面的一种软件,软件可以接收用户的命令,并且执行用户输入的命令,然后对相应的程序进行调用。

2、shell可以分为两种方式
1)shell命令行式
例如一些系统linux,从传统的意义上来说,如果不去注明的话,shell一般是命令行式。shell是传统操作和外部的接口,shell是操作系统的最外层,并且管理用户和操作系统之间的交互,操作系统完成用户的操作,并且处理输出结果。shell实现了用户和系统之间的交互,用户在键盘上输入,并且得到响应,shell基本上算是一个命令解析器吧。

2)图形界面shell
目前应用最广的windows操作系统,还有很多Linux shell,并且包含了FluxBox和CDE。

3、shell的分类
shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh、ksh、bash、psh、zsh;C家族主要包括csh、tcsh(bash和zsh在不同程度上支持csh的语法)

我们可以通过/etc/shells条件来查询linux支持的shell。命令如下:
[root@localhost ~] vi /etc/shells 
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/bin/tcsh
/bin/csh    

4、shell 编程有哪些注意事项
shell 命名:Shell脚本名称命名一般为英文、大写、小写,后缀以.sh 结尾,不能使用特殊符号、空格,名称最好要写的一眼可以看出功能
shell 编程 首行需要 #!/bin/bash 开头
shell 脚本变量不能以 数字、特殊符号开头,可以使用下划线—,但不能用破折号

二、shell脚本准备知识

1、echo
具体用法使用man或者–help和info查看相关文档帮助

在这里插入图片描述
例子

[root@localhost ~] echo -e "\\ \a"
\ 
#这个输出会输出\,同时在系统音响中输出一声提示音
[root@localhost ~] echo -e "ab\bc"
ac
#这个输出中在b键左侧有"\b",所以输出时会有ac
[root@localhost ~] echo -e "a\tb\tc\td\tf"
a	b	c	d	f
#加入了制表符"\t"和换行符“\n”,所以会按照格式输出
[root@localhost ~] 
[root@localhost ~] echo -e "\e[1;31m abcd \e[0m"
 abcd 
[root@localhost ~] echo -e "\e[1;42m abcd \e[0m"
 abcd
[root@localhost ~] 这个命令会显示出设定的颜色,即\e[1是标准格式,代表颜色输出开始,\e[0m代表颜色输出结束。
普通颜色:31m定义字体是红色。echo能够识别的颜色如下:30m是黑色,31m是红色,32m是绿色,33m是黄色,34m是蓝色,35m是洋红,36m是青色,37m是白色;
背景色:40m是黑色,41m是红色,42m是绿色,43m是黄色,44m是蓝色,45m是洋红,46m是青色,47m是白色

2、脚本的编写与执行

[root@localhost ~] vim hello.sh
[root@localhost ~] cat hello.sh 
#!/bin/bash 
#第一行代表调用bash的解释器
echo hello      #英文不需要用括号和双引号
echo "我是xxx"  #有中文的地方需要用双引号把中文括起来
[root@localhost ~] chmod +x hello.sh 
[root@localhost ~] ./hello.sh 
hello
我是xxx

3、bash的基本功能

1)历史命令的查看
[root@localhost ~] history [选项] [历史命令保存文件]
选项:
    -c:   清空历史命令
    -w:   把缓存中的历史命令写入历史命令保存文件,如果不手工指定历史命令保存文件,则放入默认的历史命令保存文件/.bash_history中

2)历史命令的调用:使用history直接查看
*使用上、下箭头调用以前的历史命令
*使用“!n”重复执行第n条历史命令
*使用“!!”重复执行上一条命令
*使用“!字串”重复执行最后一条以该字串开头的命令
*使用“!$”重复该上一条命令的最后一个参数

3)命令和文件的补全----tab键

4、命令别名查看

[root@localhost ~] alias 
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@localhost ~] alias是查询系统中定义的别名,相当于快捷键
alias 别名=‘原命令'    #设定命令别名

5、快捷键的使用

快捷键
ctrl+c 强制终止当前命令
ctrl+z 强制终止当前命令
ctrl+d 退出当前终端
ctrl+l 清屏,相当于clear
ctrl+a 在命令行输入命令的时候,把当前光标移动到命令行的开头
ctrl+e 在命令行输入命令的时候,把当前光标移动至命令行的结尾
ctrl+u 在命令行输入命令的时候,删除或者剪切所有命令
ctrl+k 在命令行输入命令的时候,删除或者剪切光标之后的内容
ctrl+y 在命令行粘贴ctrl+u或者ctrl+k剪切的内容
ctrl+s 暂停屏幕输出
ctrl+q 恢复屏幕输出

6、输入输出重定向

设备      设备文件名     文件描述符     类型
键盘      /dev/stdin       0         标准输入
显示器    /dev/stdout      1         标准输出
显示器    /dev/stderr      2         标准错误输出

7、输出重定向
在这里插入图片描述

8、统计

[root@localhost ~] wc [选项] [文件名]
选项:
    -c   统计字节数
    -w   统计单词数
    -l   统计行数

9、多行命令顺序执行
在这里插入图片描述
10、管道符

[root@localhost ~] grep [选项] "搜索内容" 文件名
选项:
    -A 数字:    列出符合条件的行,并列出后续的n行
    -B 数字:    列出符合条件的行,并列出前面的n行
    -c:         统计找到符合条件的字符串的次数
    -i:         忽略大小写
    -n:         输出行号
    -v:         反向查找
    --color=auto  搜索出的关键字用颜色表示
[root@localhost ~]  find [选项] [搜索内容]
选项:
    具体选项这里就不一一列举了,man、--help和info里面都有详细介绍
```bash
[root@localhost ~] cat /etc/passwd |find -name "root"
./.local/share/gvfs-metadata/root
[root@localhost ~] cat /etc/passwd |grep "root"
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~] 这就是管道符的作用,筛选

11、通配符
在这里插入图片描述
12、bash中的其他特殊符号
在这里插入图片描述
测试1

[root@localhost ~] name=xxx
[root@localhost ~] echo '$name'
$name
[root@localhost ~] echo "$name"
xxx
[root@localhost ~] echo `$name`
bash: xxx: 未找到命令...
#反引号只能调用系统命令
[root@localhost ~] echo `date`
2022年 04月 26日 星期二 19:39:05 CST
[root@localhost ~] echo "`date`"
2022年 04月 26日 星期二 19:39:15 CST
[root@localhost ~] echo ls
ls
[root@localhost ~] echo `ls`
aliyun和epel源.sh anaconda-ks.cfg epel-release-latest-7.noarch.rpm Firefox_wallpaper.png firewalld.sh hello.sh hostname.sh initial-setup-ks.cfg install.sh ip1.sh ip1.yml ip2.sh ip2.yml playbook剧本.yml selinux.sh shell脚本.sh 公共 模板 视频 图片 文档 下载 音乐 桌面
[root@localhost ~] echo $(date)
2022年 04月 26日 星期二 19:39:43 CST

测试2

root@localhost ~] a=123
[root@localhost ~] a="$a"456
[root@localhost ~] echo $a
123456
[root@localhost ~] 
[root@localhost ~] a=${a}789
[root@localhost ~] echo $a
123456789
[root@localhost ~] 

测试3

[root@localhost ~] 2name="yao ming" #变量名不能以数字开头
bash: 2name=yao ming: 未找到命令...
[root@localhost ~] name = "yaoming"  #等号左右两侧不能有空格
bash: name: 未找到命令...
[root@localhost ~] name=yao ming   #变量的值如果有空格,必须用双引号扩起来
bash: ming: 未找到命令...
[root@localhost ~] name="yao ming"   #定义变量
[root@localhost ~] echo $name     #输出变量的值
yao ming

变量查看
[root@localhost ~] set [选项]
选项:
     -u:    如果没有此选项,调用为声明变量时会报错(默认无任何提示)
     -x:    如果设置此项,在命令执行之前,会把命令先输出一次

变量删除
[root@localhost ~] unset 变量名

环境变量设置
[root@localhost ~] export age="18"
#声明export声明的变量既是环境变量

环境变量查询和删除
[root@localhost ~] unset gender
[root@localhost ~] env | grep gender
#删除环境变量gender

系统默认环境变量
[root@localhost ~] env
HOSTNAME=localhost.localdomain   #主机名
TERM=xterm-256color   #终端环境
SHELL=/bin/bash    #当前的shell
SSH_CLIENT=192.168.16.135   #当前操作环境是用ssh连接的,这里记录客户端ip
HISTSIZE=1000      #历史命令条数
SSH_TTY=/dev/pts/1   #ssh连接终端的pts/1
USER=root          #当前登录的用户
LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:
age=18        #我们刚才定义的环境变量
PATH=usr/lib/gt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin    #系统查找命令的路径
MAIL=/var/spool/mail/root     #用户邮箱
PWD=/root     #当前所在目录
LANG=zh_CN.UTF-8     #当前语系
MACHTYPE=i386-redhat-linux-gnu    #软件类型是i386兼容类型
MATLCHECK=60    #每六十秒去扫描新邮件
PPID=2166    #父shell的pid。我们当前是一个子shell
PS1='[\u@\h \w]$'    #命令提示符
PS2='>'   #如果命令一行没有输入完成,第二行的提示符
UID=0     #当前用户的uid

测试4

查看当前语系
[root@localhost ~] locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
[root@localhost ~] echo $LANG
zh_CN.UTF-8

查看文件系统
[root@localhost ~] df
文件系统                       1K-块    已用     可用 已用% 挂载点
devtmpfs                     1913608       0  1913608    0% /dev
tmpfs                        1930632       0  1930632    0% /dev/shm
tmpfs                        1930632   12600  1918032    1% /run
tmpfs                        1930632       0  1930632    0% /sys/fs/cgroup
/dev/mapper/centos_192-root 52403200 5158304 47244896   10% /
/dev/sda1                    1038336  242936   795400   24% /boot
/dev/mapper/centos_192-home 47285700   33108 47252592    1% /home
tmpfs                         386128      20   386108    1% /run/user/0
/dev/sr0                     4554702 4554702        0  100% /run/media/root/CentOS 7 x86_64
[root@localhost ~]# 

13、位置参数变量
在这里插入图片描述

14、PATH变量

[root@localhost ~] echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
[root@localhost ~] echo $PS1
[\u@\h \W]\$
#[用户名@简写主机名 最后所在目录]提示符
[root@localhost ~]# 

✧. PS1变量:命令提示符设置

PS1是一个很有意思的变量(这可不是SONY的游戏机哦) ,是用来定义命令行的提示符的,可以安装我们自己的需求来定义自己喜欢的提示符。PS1 可以支持以下这些选项:

\H: 显示完整的主机名。如默认主机名“localhost. localdomain”

\h: 显示简写主机名。如默认主机名“localhost”

\t: 显示24小时制时间,格式为“HH:M:SS”

\T:显示12小时制时间,格式为“H:M:SS”

\A: 显示24小时制时间,格式为“HH:MM”

\@: 显示12小时制时间,格式为“HH:MM am/ pm”

显示当前用户名

显示Bash的版本信息

:显示当前所在目录的完整名称

\W: 显示当前所在目录的最后一个目录

\#: 执行的第几个命令

\$: 提示符。如果是root用户会显示提示符为“#”,如果是普通用户会显示提示符为“$”
这些选项该怎么用啊?我们先看看PS1变量的默认值吧:

[root@localhost ~] echo $PS1

[\u@\h \w]\$

#默认的提示符是显示“[用户名@简写主机名最后所在目录]提示符”PS1变量中,如果是可以解释的符号,如“\u”、“\h” 等,则显示这个符号的作用。如果是不能解释的符号,如“@”或“空格”,则原符号输出。那么我们修改下PS1变量,看看会出现社么情况吧:


[root@04:50:08 /usr/local/src] PS1=' [\u@\@ \h \# \W]\$'

[root@04:53上午localhost 31 src]#

#提示符又变了。|@: 时间格式是HH:LN am/pom; |#: 会显示执行了多少个命令

PS1变量可以自由定制,好像看到了点Linux可以自由定制和修改的影子,还是很有意思的。不过说实话- -个提示符已经使用习惯了,如果换一个还是非常别扭的,还是改回默认的提示符吧:

[root@04:53上午localhost 31 src] PS1=' [\u@\h \W]\$

[root@localhost src]#

LANG变量定义了Linux系统的主语系环境,这个变量的默认值是:

[root@localhost src] echo $LANG

zh_ CN.UTF-8

这是因为我们Linux安装时,选择的是中文安装,所以默认的主语系变量是“zh_ CN. UTF-8”。那么Linux中到底支持多少语系呢?我们可以使用以下命令查询:

[root@localhost src] locale -a| more

aa DJ. iso88591

aa_ DJ.utf8

aa_ ER

...省略部分输出..

#查询支持的语系

[root@localhost src] locale -a| wc -l

我们支持这么多的语系,当前系统到底是什么语系呢?使用locale命令直接查询:[root@localhost src] locale

LANG=zh_ CN.UTF-8

LC CTYPE="zh CN.UTF-8”

15、预定义变量

预定义变量         作用
$?           最后一次执行的命令返回状态,0为正常执行
$$           当前进程的进程号(pid)
$!           后台运行的最后一个进程的进程号(pid)

16、接收键盘输入

[root@localhost^ ] read [选项] [变量名]

选项:

-p“提示信息” : 在等待read输入时,输出提示信息

-t 秒数: read命令会一直等待用户输入,使用此选项可以指定等待时间

-n字符数: read命令只接受指定的字符数,就会执行

-s:  隐藏输入的数据,适用于机密信息的输入

变量名:

变量名可以自定义,如果不指定变量名,会把输入保存入默认变量REPLY

如果只提供了一一个变量名,则整个输入行赋予该变量

如果提供了一个以上的变量名,则输入行分为若干字,- 一个接一- 个地赋予各个变量,而命令行上的最后一个变量取得剩余的所有字

还是写个例子来解释下read命令:

[root@localhost sh] vi read. sh

#!/bin/bash

read -t 30 -p "Please input your name: ”name

#提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中

echo "Name is $name'

#看看变量“$name ”中是否保存了你的输入

read -S -t 30 -p "Please enter your age:”age #提示输入年龄”并等待30秒, 把用户的输入1车入变量a

#年龄是隐私,所以我们用“-5”选项隐藏输入

#调整输出格式,如果不输出换行,一会的年龄输出不会换行
echo "Age is $age"

read -n 1 -t 30 -p "Please select your gender[M/F]:" gender 20/31

#提示“请选择性别”并等待30秒,把用户的输入保存入变量gender

#使用“-n 1”选项只接收-一个输入字符就会执行 (都不用输入回车)

echo -e "\n”

echo "Sex is $gender"

17、使用declare声明变量

数值运算的方法

那如果我需要进行数值运算,可以采用以下三种方法中的任意-一种:

✧使用declare声明变量类型

既然所有变量的默认类型是字符串型,那么只要我们把变量声明为整数型不就可以运算了吗?使用declare命令就可以实现声明变量的类型。命令如下:

[root@localhost^ ] declare [+/-][选项] 变量名

选项:

-:               给变量设定类型属性

+:               取消变量的类型属性

-a:              将变量声明为数组型

-i:              将变量声明为整数型(integer)

-r:              讲变量声明为只读变量。注意,一旦设置为只读变量,既不能修改变量的值,也不能删除变量,甚至不能通过+r 取消只读属性

-x:              将变量声明为环境变量

-p:              显示指定变量的被声明的类型

例如

[root@localhost ~] aa=10
[root@localhost ~] bb=20
[root@localhost ~] declare -i cc=$aa+$bb
[root@localhost ~] echo $cc
30
[root@localhost ~] 首先赋予aa和bb值,之后再声明变量cc的值是整数性,他的值是aa和bb的和
[root@localhost ~] declare +i cc=$aa+$bb
[root@localhost ~] echo $cc
10+20
[root@localhost ~] 这里就是取消声明他的值不是aa和bb的和
其他的具体怎么用自己多多尝试吧,在这里我就不一一例举了

18、使用expr或者let数值以及 $((运算式)) 或 $[运算式] 的运算工具

[root@localhost ~] aa=100
[root@localhost ~] bb=200
[root@localhost ~] dd=$(expr $aa + $bb)
[root@localhost ~] echo $dd
300
[root@localhost ~] 使用expr运算的时候要注意“+”左右都有空格,否则运算不执行

[root@localhost ~] n=200
[root@localhost ~] let n+=1
[root@localhost ~] echo $n
201
[root@localhost ~]定义变量n的值,使n的值等于变量本身再加1

[root@localhost ~] aa=600
[root@localhost ~] bb=300
[root@localhost ~] cc=$(( $aa+$bb ))
[root@localhost ~] echo $cc
900
[root@localhost ~] dd=$[ $aa-$bb ]
[root@localhost ~] echo $dd
300
[root@localhost ~]这里运算符之间无需空格即可实现数值运算

19、运算符

优先级 运算符 说明
13 -,+ 单目负、单目正
12 !,~ 逻辑非、按位取反或补码
11 *,/,% 乘,除,取模
10 +,- 加,减
9 << , >> 按位左移、按位右移
8 <= , => , < , > 小于或等于、大于或等于、小于、大于
7 == , != 等于、不等于
6 & 按位与
5 ^ 按位异或
4 符号是一竖杆 按位或,由于无法识别,这里用汉字代替
3 && 逻辑与
2 两条竖杠 逻辑或,由于无法识别,这里用汉字代替
1 =,+=,-=,*=,/=,%=,&=,^=,竖杠加等于,<<=,>>= 赋值、运算且赋值

例如

[root@localhost ~] 
[root@localhost ~] aa=$(( (100+2)*3/2 ))
[root@localhost ~] echo $aa
153
[root@localhost ~] bb=$(( 1 && 0 ))
[root@localhost ~] echo $bb
0
[root@localhost ~] 

20、变量的测试与内容置换
在这里插入图片描述

21、删除变量
unset [指定变量名]
例如:

unset y
删除变量y

22、环境变量配置文件

source 配置文件
或
. 配置文件
在linux系统登录的时主要生效的配置文件有以下五个
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc

查询所有快捷键

[root@localhost ~] stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke
[root@localhost ~]更改快捷键
[root@localhost ~] stty 关键字 快捷键
[root@localhost ~]例如
[root@localhost ~] stty intr ^p
[root@localhost ~] 最后强制终止变成了ctrl+p快捷键

23、shell登录信息
在这里插入图片描述

24、正则表达式
在这里插入图片描述
扩展正则表达式

扩展元字符 作用
+ 前一个字符匹配1次或任意多次
前一个字符匹配0次或1次
一条竖杠(这里由于显示不出来,所以用汉字表示) 匹配两个或者多个分支选择
() 匹配其整体为一个字符,即模式单元。可以理解为由多个单个字符组成的大字符

25、字符截取和替换命令

[root@localhost ~] cut 
用法:cut [选项]... [文件]...
-f 列号
-d 分隔符
-c 字符范围
例如:
cut (内容之间只能使用tab键,不能使用空格,否则会出错) 提取列
cut  -f 2 xxx.txt   #在xxx.txt这个文本中提取第二列
cat xxx.txt | grep "xxx" |cut -d ":" -f 1   #在xxx.txt这个文件中搜索xxx的信息,最后提取以冒号为分割的并输出第一行
[root@localhost ~]# 

awk的条件
在这里插入图片描述
awk内置变量
在这里插入图片描述
awk中printf以及print的使用

[root@localhost ~] printf 格式化并显示数据(提取出的内容无空格)
%ns: 输出n个字符
%ni: 输出n个整数
%m.nf:输出


[root@localhost ~] awk   (可以提取有空格和tab键的内容)
例如:
[root@localhost ~] df -h
文件系统                     容量  已用  可用 已用% 挂载点
devtmpfs                     1.9G     0  1.9G    0% /dev
tmpfs                        1.9G     0  1.9G    0% /dev/shm
tmpfs                        1.9G   13M  1.9G    1% /run
tmpfs                        1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/centos_192-root   50G  5.0G   46G   10% /
/dev/sda1                   1014M  238M  777M   24% /boot
/dev/mapper/centos_192-home   46G   33M   46G    1% /home
tmpfs                        378M  4.0K  378M    1% /run/user/42
tmpfs                        378M   24K  378M    1% /run/user/0
/dev/sr0                     4.4G  4.4G     0  100% /run/media/root/CentOS 7 x86_64
[root@localhost ~] df -h |awk '{printf $5}'   #无空格
已用%0%0%1%0%10%24%1%1%1%100%[root@localhost ~]# 
[root@localhost ~] df -h |awk '{print $5}'  #有空格
已用%
0%
0%
1%
0%
10%
24%
1%
1%
1%
100%
[root@localhost ~]# 
[root@localhost ~] df -h |awk '{print $5 "\t" "\n"}'  #排列整齐
已用%	

0%	

0%	

1%	

0%	

10%	

24%	

1%	

1%	

1%	

100%	

[root@localhost ~]# 

又或者:

#这是在截取的内容最末尾显示想要的内容,比如666
[root@localhost ~] df -h |awk 'END{print 666} {printf $2 "\t" "\n"}'
容量	
1.9G	
1.9G	
1.9G	
1.9G	
50G	
1014M	
46G	
378M	
378M	
4.4G	
666
[root@localhost ~] df -h |awk 'BEGIN{print 666} {printf $2 "\t" "\n"}'
666
容量	
1.9G	
1.9G	
1.9G	
1.9G	
50G	
1014M	
46G	
378M	
378M	
4.4G	
#这是在截取的内容最开头显示想要的内容,比如666

sed命令

sed命令
[root@localhost ~] sed [选项] '[动作]' 文件名
例:
sed '3c 4 abc 11 22 33' xxx.txt
#将xxx.txt文件中第三行的内容换成“4、abc、11、22、33”

```bash
sed '2p' xxx.txt   
#查看某文档的第二行,具体用法这里就不一一列举了

sort命令

例子:
sort /etc/passwd    #从a开始排序
sort -r /etc/passwd   #在上一步的基础上反过来排序
-u  取消重复行

三、条件判断

1、按文件类型判断:
在这里插入图片描述
2、按文件权限判断
在这里插入图片描述
3、两个文件之间的比较
在这里插入图片描述
4、两个整数之间的比较
在这里插入图片描述
5、字符串的判断
在这里插入图片描述
6、多重条件判断
在这里插入图片描述

四、结尾

首先恭喜您能够看到这里,当然看到这里仅仅是不够的,希望能边看便练习、形成记忆,并自己尝试不看代码就能够很轻松写出一些来,那么再次恭喜您,又往更加深一层迈去,不过还只是刚踏进一只脚进去、不要灰心,多多学习多多思考,我相信如果这些内容您学得都差不多了、又或者了解了个大概,以后不管是学哪门编程语言都很轻松!

如果本文对您有一点点帮助,可以点赞、关注、收藏一下

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_51625703/article/details/124430435

智能推荐

hive使用适用场景_大数据入门:Hive应用场景-程序员宅基地

文章浏览阅读5.8k次。在大数据的发展当中,大数据技术生态的组件,也在不断地拓展开来,而其中的Hive组件,作为Hadoop的数据仓库工具,可以实现对Hadoop集群当中的大规模数据进行相应的数据处理。今天我们的大数据入门分享,就主要来讲讲,Hive应用场景。关于Hive,首先需要明确的一点就是,Hive并非数据库,Hive所提供的数据存储、查询和分析功能,本质上来说,并非传统数据库所提供的存储、查询、分析功能。Hive..._hive应用场景

zblog采集-织梦全自动采集插件-织梦免费采集插件_zblog 网页采集插件-程序员宅基地

文章浏览阅读496次。Zblog是由Zblog开发团队开发的一款小巧而强大的基于Asp和PHP平台的开源程序,但是插件市场上的Zblog采集插件,没有一款能打的,要么就是没有SEO文章内容处理,要么就是功能单一。很少有适合SEO站长的Zblog采集。人们都知道Zblog采集接口都是对Zblog采集不熟悉的人做的,很多人采取模拟登陆的方法进行发布文章,也有很多人直接操作数据库发布文章,然而这些都或多或少的产生各种问题,发布速度慢、文章内容未经严格过滤,导致安全性问题、不能发Tag、不能自动创建分类等。但是使用Zblog采._zblog 网页采集插件

Flink学习四:提交Flink运行job_flink定时运行job-程序员宅基地

文章浏览阅读2.4k次,点赞2次,收藏2次。restUI页面提交1.1 添加上传jar包1.2 提交任务job1.3 查看提交的任务2. 命令行提交./flink-1.9.3/bin/flink run -c com.qu.wc.StreamWordCount -p 2 FlinkTutorial-1.0-SNAPSHOT.jar3. 命令行查看正在运行的job./flink-1.9.3/bin/flink list4. 命令行查看所有job./flink-1.9.3/bin/flink list --all._flink定时运行job

STM32-LED闪烁项目总结_嵌入式stm32闪烁led实验总结-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏6次。这个项目是基于STM32的LED闪烁项目,主要目的是让学习者熟悉STM32的基本操作和编程方法。在这个项目中,我们将使用STM32作为控制器,通过对GPIO口的控制实现LED灯的闪烁。这个STM32 LED闪烁的项目是一个非常简单的入门项目,但它可以帮助学习者熟悉STM32的编程方法和GPIO口的使用。在这个项目中,我们通过对GPIO口的控制实现了LED灯的闪烁。LED闪烁是STM32入门课程的基础操作之一,它旨在教学生如何使用STM32开发板控制LED灯的闪烁。_嵌入式stm32闪烁led实验总结

Debezium安装部署和将服务托管到systemctl-程序员宅基地

文章浏览阅读63次。本文介绍了安装和部署Debezium的详细步骤,并演示了如何将Debezium服务托管到systemctl以进行方便的管理。本文将详细介绍如何安装和部署Debezium,并将其服务托管到systemctl。解压缩后,将得到一个名为"debezium"的目录,其中包含Debezium的二进制文件和其他必要的资源。注意替换"ExecStart"中的"/path/to/debezium"为实际的Debezium目录路径。接下来,需要下载Debezium的压缩包,并将其解压到所需的目录。

Android 控制屏幕唤醒常亮或熄灭_android实现拿起手机亮屏-程序员宅基地

文章浏览阅读4.4k次。需求:在诗词曲文项目中,诗词整篇朗读的时候,文章没有读完会因为屏幕熄灭停止朗读。要求:在文章没有朗读完毕之前屏幕常亮,读完以后屏幕常亮关闭;1.权限配置:设置电源管理的权限。

随便推点

目标检测简介-程序员宅基地

文章浏览阅读2.3k次。目标检测简介、评估标准、经典算法_目标检测

记SQL server安装后无法连接127.0.0.1解决方法_sqlserver 127 0 01 无法连接-程序员宅基地

文章浏览阅读6.3k次,点赞4次,收藏9次。实训时需要安装SQL server2008 R所以我上网上找了一个.exe 的安装包链接:https://pan.baidu.com/s/1_FkhB8XJy3Js_rFADhdtmA提取码:ztki注:解压后1.04G安装时Microsoft需下载.NET,更新安装后会自动安装如下:点击第一个傻瓜式安装,唯一注意的是在修改路径的时候如下不可修改:到安装实例的时候就可以修改啦数据..._sqlserver 127 0 01 无法连接

js 获取对象的所有key值,用来遍历_js 遍历对象的key-程序员宅基地

文章浏览阅读7.4k次。1. Object.keys(item); 获取到了key之后就可以遍历的时候直接使用这个进行遍历所有的key跟valuevar infoItem={ name:'xiaowu', age:'18',}//的出来的keys就是[name,age]var keys=Object.keys(infoItem);2. 通常用于以下实力中 <div *ngFor="let item of keys"> <div>{{item}}.._js 遍历对象的key

粒子群算法(PSO)求解路径规划_粒子群算法路径规划-程序员宅基地

文章浏览阅读2.2w次,点赞51次,收藏310次。粒子群算法求解路径规划路径规划问题描述    给定环境信息,如果该环境内有障碍物,寻求起始点到目标点的最短路径, 并且路径不能与障碍物相交,如图 1.1.1 所示。1.2 粒子群算法求解1.2.1 求解思路    粒子群优化算法(PSO),粒子群中的每一个粒子都代表一个问题的可能解, 通过粒子个体的简单行为,群体内的信息交互实现问题求解的智能性。    在路径规划中,我们将每一条路径规划为一个粒子,每个粒子群群有 n 个粒 子,即有 n 条路径,同时,每个粒子又有 m 个染色体,即中间过渡点的_粒子群算法路径规划

量化评价:稳健的业绩评价指标_rar 海龟-程序员宅基地

文章浏览阅读353次。所谓稳健的评估指标,是指在评估的过程中数据的轻微变化并不会显著的影响一个统计指标。而不稳健的评估指标则相反,在对交易系统进行回测时,参数值的轻微变化会带来不稳健指标的大幅变化。对于不稳健的评估指标,任何对数据有影响的因素都会对测试结果产生过大的影响,这很容易导致数据过拟合。_rar 海龟

IAP在ARM Cortex-M3微控制器实现原理_value line devices connectivity line devices-程序员宅基地

文章浏览阅读607次,点赞2次,收藏7次。–基于STM32F103ZET6的UART通讯实现一、什么是IAP,为什么要IAPIAP即为In Application Programming(在应用中编程),一般情况下,以STM32F10x系列芯片为主控制器的设备在出厂时就已经使用J-Link仿真器将应用代码烧录了,如果在设备使用过程中需要进行应用代码的更换、升级等操作的话,则可能需要将设备返回原厂并拆解出来再使用J-Link重新烧录代码,这就增加了很多不必要的麻烦。站在用户的角度来说,就是能让用户自己来更换设备里边的代码程序而厂家这边只需要提供给_value line devices connectivity line devices