解决方案

Linux学习笔记(七)——shell语言

seo靠我 2023-09-24 00:19:24

七、Shell语言

(一)、shell概述

1、Shell简介

· Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停SEO靠我止甚至是编写一些程序。

· Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

2、Shell脚本的执行方SEO靠我

echo输出命令

[root@localhost ~]#echo [选项] [输出内容]

选项:

-e:  支持反斜线控制的字符转换

[root@localhost ~]#echo -e “ab/bc”

#删SEO靠我除左侧字符

[root@localhost ~]#echo -e “a\tb\tc\nd\te\tf”

#制表符与换行符

[root@localhost ~]#echo -e

“x61\t\x62\t\x63SEO靠我\n\x64\t\x65\t\x66”

#按照十六进制ASCII码也同样可以输出

脚本执行

>>touch test.sh #新建文件

>>vim test.sh #编辑文件指令

>键入 i

>输入#!/bin/SEO靠我bash #自成一行标明shell种类

echo hello world; #内容

键入: esc #表示准备退出

输入: : wq #表示保存

>>chmod +x ./test.sh #使脚本具有执行权限SEO靠我

>>./test.sh #执行脚本 或使用 sh 文件名.后缀 3、Bash的基本功能

历史命令

[root@localhost ~]#history [选项] [历史命令保存文件]

选项:

-c:  清空历史SEO靠我命令

-w:  把缓存中的历史命令写入历史命令保存文件~/.bash_history

· 使用上、下箭头调用以前的历史命令

· 使用“!n”重复执行第n条历史命令

· 使用“!!”重复执行上一条命令

· 使用“SEO靠我!字串”重复执行最后一条以该字串开头的命令

命令与文件补全

· 在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按“Tab”键就会自动进行补全。

命令别名与常用快捷键

1、命令SEO靠我别名alias

[root@localhost ~]#alias 别名=‘原命令’

#设定命令别名

[root@localhost ~]#alias

#查询命令别名

让别名永久生效

[root@localhostSEO靠我 ~]#vi /root/.bashrc

删除别名

[root@localhost ~]#unalias 别名

2、Bash常用快捷键

输入输出重定向

1、标准输入输出

设备设备文件名文件描述符类型键盘/dev/SEO靠我stdin0标准输入显示器/dev/sdtout1标准输出显示器/dev/sdterr2标准错误输出

2、输出重定向

3、输入重定向

[root@localhost ~]# wc [选项] [文件名]

选项:SEO靠我

-c  统计字节数

-w  统计单词数

-l  统计行数

多命令顺序执行与管道符

1、多命令顺序执行

[root@localhost ~]#dd [选项]

选项:

if=输入文件    制定源文件或源设备

of=输出SEO靠我文件    制定目标文件或目标设备

bs=字节数    制定一次输入/输出多少字节,即把这些字节看做一个数据块

count=个数    制定输入/输出多少个数据块

eg:[root@localhost ~]SEO靠我#date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date

[root@localhost ~]#ls anaconda-ks.cfgSEO靠我 && echo yes

[root@localhost ~]#ls /root/test || echo "no

[root@localhost ~]#命令 && echo yes || echo noSEO靠我

[root@localhost~]#ls;date;cd /user;pwd

2、管道符

命令格式:

[root@localhost ~]#命令1 | 命令2

#命令1的正确输出作为命令2的操作对象

[rootSEO靠我@localhost ~]#ll -a /etc/ | more

[root@localhost ~]#netstat -an | grep “ESTABLISHEN”

通配符和其他特殊符号

1、通配符

[rSEO靠我oot@localhost ~]#grep [选项] “搜索内容” 文件名

选项:

-i:  忽略大写

-n:  输出行号

-v:  反向查找

–color=auto  搜索出的关键字用颜色显示

2、Bash中其SEO靠我他特殊符号

单引号与双引号

[root@localhost ~]#name=sc

[root@localhost ~]#echo “KaTeX parse error: Expected EOF, got SEO靠我# at position 25: …ot@localhost ~]#̲echo name’

[root@localhost ~]#echo “KaTeX parse error: Expected ESEO靠我OF, got # at position 27: …ot@localhost ~]#̲echo (date)’ 4、变量

1、环境变量是什么

· 用户自定义变量只在当前的shell中生效,而环境变量会在当SEO靠我前Shell和这个Shell的所有子Shell当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效。

2、设置环境变量

export 变量名=变量值

#申明变量

env

#查SEO靠我询变量

unset 变量名

#删除变量

3、位置参数变量

位置参数变量作用$nn为数字,$0代表命令本身,$1- 9 代 表 第 一 到 第 九 个 参 数 , 十 以 上 的 参 数 需 要 用 大 括 号SEO靠我 包 含 , 如 9代表第一到第九个参数,十以上的参数需要用大括号包含,如 9代表第一到第九个参数,十以上的参数需要用大括号包含,如{10}$*这个变量代表命令行中所有的参数,$*把所有的参数看成一个SEO靠我整体$@这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待$#这个变量代表命令中所有参数的个数

例子:

#!/bin/bash

num1=$1

num2=$2

sum= ( ( (( ((num1+$SEO靠我num2))

#变量sum的和是num1加num2

echo $sum

#打印变量sum的值

例子:

#!/bin/bash

echo “A total of $# parameters”

#使用$#代表所有参数的SEO靠我个数

echo “The parameters is:$*”

#使用$*代表所有的参数

echo “The parameters is:$@”

#使用$@也代表所有参数

例子:¥*与$@的区别

#!/bin/baSEO靠我sh

for i in “$*”

#$*中的所有参数看成是一个整体,所以这个for循环只会循环一次

do

echo “The parameters is:$i”

done

x=1

for y in “$@”

# @ SEO靠我中 的 每 个 参 数 都 看 成 是 独 立 的 , 所 以 “ @中的每个参数都看成是独立的,所以“ @中的每个参数都看成是独立的,所以“@”中有几个参数,就会循环几次

do

echo “The paSEO靠我rameter x i s : x is: xis:y”

x= ( ( (( ((x+1))

done

4、预定义变量

预定义变量作用$?最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确SEO靠我执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了$$当前进程的进程号(PID)$!后台运行的最后一个进程的进程号(PID)

接收键盘输入

[root@localSEO靠我host ~]#read 【选项】【变量名】

选项:

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

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

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

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

5、Bash运算符

数值运算和运算符

1、declare声明变量类型

[root@localhost ~]decaleSEO靠我r [+/-][选项] 变量名

选项:

-: 给变量设定类型属性

+:  取消变量的类型属性

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

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

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

2SEO靠我、数值运算——方法1

[root@localhost ~]# aa=11

[root@localhost ~]# bb=22

#给变量aa和bb赋值

[root@localhost ~]#decaler -iSEO靠我 cc= a a + aa+ aa+bb

方法2:expr或let数值运算工具

[root@localhost ~]#aa=11

[root@localhost ~]#bb=22

#给变量aa和变量bb赋值

[SEO靠我root@localhost ~]#dd=$(expr $aa + $bb)

#dd的值是aa和bb的和。注意“+”号左右两侧必须有空格

方法3:“ ( ( 运 算 式 ) ) ” 或 “ ((运算式))SEO靠我”或“ ((运算式))”或“[运算式]”

[root@localhost ~]#aa=11

[root@localhost ~]#bb=22

[root@localhost ~]#ff= ( ( (( ((SEO靠我aa+$bb))

[root@localhost ~]#gg= [ [ [aa+$bb]

6、变量测试与内容替换

[root@localhost ~]#unset y

#删除变量

[root@localhostSEO靠我 ~]#x=${y-new}

#进行测试

[root@localhost ~]#echo $x

new

#因为变量y不存在,所以x=new

(二)、shell语法

1、正则表达式

基础正则表达式

2、字符截取命令

字段SEO靠我提取命令 cut

[root@localhost ~]#cut [选项] 文件名

选项:

-f 列号:    提取第几列

-d 分隔符:   按照指定分隔符分隔列

printf命令

printf  ‘输出类型输出SEO靠我格式’  输出内容

输出类型:

%ns:  输出字符串。n是数字指输出几个字符

%ni:  输出整数。n是数字指代输出几个数字

%m.nf:  输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.SEO靠我2f共输出8位数,其中2位是小数,6位是整数。

输出格式:

\a:  输出警告声音

\b:  输出退格键,也就是Backspace键

\f:  清楚屏幕

\n:  换行

\r:  回车,也就是Enter键

\t: SEO靠我 水平输出退格键,也就是Tab键

\v:  垂直输出退格键,也就是Tab键

在awk命令的输出中支持print和pintf命令

· print:print会在每个输出之后自动加入一个换行符(Linux默认没SEO靠我有print命令)

· printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符

#awk ‘{printf $2 “\t” $6 “\n”}’ studentSEO靠我.txt

#df -h | awk ‘print $1 “\t” $3’

sed命令

sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新SEO靠我增的命令。

[root@localhost ~]#sed [选项] ‘[动作]’ 文件名

选项:

-n:  一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕

-SEO靠我e:  允许对输入数据应用多条sed命令编辑

-i:  用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出。

动作:

a \:  追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需SEO靠我要用“\”代表数据未完结。

c \:  行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用“\”代表数据未完结

o \:  插入,在当期行前插入一行或多行。插入多行时,除最后一行SEO靠我外,每行末尾需要用“\”代表数据未完结。

d:  删除,删除指定的行。

p:  打印,输出指定的行

s:  字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g”(和vim中的替换SEO靠我格式类似)。

eg: [root@localhost ~]#sed ‘2p’ student.txt

#查看文件的第二行

[root@localhost ~]#sed -n ‘2p’ student.txtSEO靠我

[root@localhost ~]#sed ‘2,4d’ student.txt

#删除第二行到第四行的数据,但不修改文件本身

[root@localhost ~]#sed ‘2a hello’ stuSEO靠我dent.txt

#在第二行后追加hello

[root@localhost ~]#sed ‘2i hello’ \

world` student.txt

#在第二行前插入两行数据

#sed ‘2c No suSEO靠我ch person’ student.txt

#数据替换

3、字符处理命令

排序命令 sort

[root@localhost ~]#sort [选项] 文件名

选项:

-f:  忽略大小写

-n:  以数值型进行SEO靠我排序,默认使用字符串型排序

-r:  反向排序

-t:  指定分隔符,默认是分隔符是制表符

-k n[,m]:按照指定的字符范围排序。从第n字段开始,m字段结束(默认到行尾)

[root@localhost SEO靠我~]#sort /etc/passwd

#排序用户信息文件

[root@localhost ~]#sort -r /etc/passwd

#反向排序

[root@localhost ~]#sort -t “:SEO靠我” -k 3,3 /etc/passwd

#指定分隔符是“:”,用第三字段开头,第三字段结尾排序,就是只用第三字段排序 4、条件判断

1、按照文件类型进行判断

[root@localhost ~]#test SEO靠我-e /root/install.log

[root@localhost ~]#[-e /root/install.log]

[-d /root]&& echo “yes” || echo “no”

#第一SEO靠我个判断命令如果正确执行,则打印“yes”,否则则打印“no”

2、按照文件权限进行判断

3、两个文件之间进行比较

4、两个整数之间比较

5、字符串的判断

aa=11

bb=22

#给变量aa和变量bb赋值

["$aaSEO靠我"==“bb”]&& echo “yes” || echo “no” 返回no

#判断两个变量的值是否相等,明显不相等,所以返回no。

6、多重条件判断

5、流程控制

if语句

1、单分支if条件语句

if [ SEO靠我条件判断式 ];then

程序

fi

或者

if [ 条件判断式 ]

then

程序

fi

单分支条件语句需要注意几个点

·  if语句使用fi结尾,和一般语言使用大括号结尾不同

·  [ 条件判断式 ]就是使用testSEO靠我命令判断,所以中括号和条件判断式之间必须有空额

·  then后面跟符合条件之后执行的程序,可以放在[]之后,用“:”分割。也可以换行写入,就不需要“:”了。

2、双分支if条件语句

if [条件判断式]

tSEO靠我hen

条件成立时,执行的程序

else

条件不成立时,执行的另一个程序

fi

case语句

多分支case条件语句

·  case语句和if…elif…else语句一样都是多分支条件语句,不过和if多分支条件语句SEO靠我不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系。

case $变量名 in

“值1”)

如果变量的值等于值1,则执行程序1

;;

“值2”)

如果变量的值等于值2,则执行程序2

;;

…省SEO靠我略其他分支…

*)

如果变量的值都不是以上的值,则执行此程序

;;

esac

for循环

语法一

for 变量 in 值1 值2 值3…

do

程序

done

语法二

for((初始值;循环控制条件;变量变化))

do

程序

doSEO靠我ne

while循环

while循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。这就和for的固定循环不太一样了。

while [条件判断式]

do

SEO靠我

done

until循环,和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。

“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2