shell学习-第四天

发布于:2025-03-12 ⋅ 阅读:(17) ⋅ 点赞:(0)

特殊变量

读取输入参数 $0~9 

0为获取文件名称

如果获取第十个参数需要使用${10}

${#} 读取所有输入参数个数

$*

$@

上述都是获取所有输入参数

不使用双引号:功能一致

使用双引号括起来,上面为获取的所有参数拼接为一个字符串,格式为“$1,$2...”

下面的获取一组参数列表对象 "$1" "$2" ...

$? 用于获取上一个shell命令的退出状态码,或者函数返回值

每个shell命令的执行都有一个返回值,这个返回值用于说明命令执行是否成功

一般来说,返回0代表命令执行成功。

$$ 查看当前shell环境进程编号

shell环境分类

交互式与非交互式shell

交互式shell

与用户进行交互互动,效果是用户输入一个命令,shell立即反馈

非交互式shell

无需用户参与

登录shell与非登录

需要用户名密码的shell环境为登录环境

不同的工作环境加载环境变量流程不一样

字符串三种格式区别

双引号包含变量

单引号原样输出

不被引号包围和双引号一致,但是不能包含空格

字符串拼接:推荐使用双引号拼接

字符串截取

数组:在shell中,使用括号来表示数组,数组元素之间用空格来分隔

两种方式:

        array_name=(item1 item2 ...)

        array_name=([下标]=item1 ...)

note:等号之间不能由空格

数组内容可以是字符串

语法

获取下标元素值:${arr[index]}

获取所有元素:${arr[*]} 或者为${arr[@]}

获取数组长度:${#arr[*]}或者${#arr[@]}

获取数组指定元素字符长度:${#arr[索引]}

unset arr[index]删除数组指定元素

unset arr 删除整个数组

内置命令

shell内置命令,就是由Bash Shell 自身提供的命令,而不是文件系统可执行脚本文件

可以使用type确定一个命令是否为内置命令

type 命令

通常来说:内置命令会比外部命令执行更快,执行外部命令时会触发磁盘I/O,还需要fork出一个单独的进程

常见内置命令

alisa设置命令别名

不带参数显示当前所有shell进程中的别名列表

alias 别名=”命令“ 设置别名

unalias 别名 删除别名

unalias -a 删除所有别名

以上为临时删除,如果向永久删除必须去配置文件中删除

echo 输出字符串

默认换行输出 echo 字符串

不换行输出 echo -n 字符串

默认不解析转义字符

解析转义字符 echo -e 字符串

read读取控制台输入

从标准输入中读取数据并赋值给变量,如果没有重定向,默认从终端中读取,进行重定向可以从文件中读取

语法 read [-options] [var1 var2 var...]

var表示用来存储数据的变量

如果没有提供变量名,那么读取的数据放到‘REPLY’中

选项:

        -n num 读取num个字符,而不是整行字符

        -p prompt 显示提示信息,提示内容为prompt

        -s 静默模式,不会再屏幕上显示输入字符

        -t seconds 设置超时时间,单位为秒,如果没有在指定时间输入完成,那么read将会返回非零的退出状态,表示读取失败

exit 用于退出当前shell环境

返回一个状态码

用$?获取

应用场景,当文件执行出错的时候,可以返回不同的状态值来代表不同的错误

declare 设置变量

设置变量属性

declare [+/-] [aArxif] [变量名称=设置值]

declare -A 关联数组变量名=([字符串]=值 [字符串]=值)

查看全部shell变量和函数

实现关联数组变量

shell计算命令

expr命令详解:表达式求值

1.expr length 字符串 输出字符串长度

2.expr substr 字符串 start end 截取字符串

3.expr index 被查找字符串 需要查找的字符

正则表达式匹配

expr match 字符串 正则表达式

(())命令详解

进行整数的数学运算,使用$获取表达式命令的结果,这和使用$获取变量值是一样的

语法$((表达式))

(())内部自动解析变量,不使用$

let命令详解

let只能用于赋值计算,但没有(())功能强大,let只能用于赋值计算,不能直接输出,不可以条件判断

let 赋值表达式

let c=a+b

$[] 表示整数运算
bc命令

bc [options] [参数]

由于Bash shell内置了整数运算,Linux bc可以进行浮点运算

而且还可以进行进制的转换

-l 选项使用标准数学库

-q 不显示欢迎信息

参数为包含执行计算任务的文件

在shell内部,也是可以借助管道使用bc计算器的

 语法:echo "expression" | bc [options]

expression必须符合bc命令的格式

里面可以引用shell里面的命令

将bc计算结果赋值给shell变量

第一种方式使用 ` 命令 `

第二种方式 $() 兼容性较差

shell中非互动式的输入重定向

将计算表达式输出给bc去执行,特点类似于文件中的输入

将EOF多行表达式输入给bc执行,然后将执行结果赋值给var_name

方式1:

var_name=`bc [-options] << EOF

第一行表达式

第二行表达式

EOF

`

方式2:

var_name=$(bc [-options] << EOF

第一行表达式

第二行表达式

EOF

)

流程控制语句

if语法

一行 if 条件; then 命令; fi

多行写法
if 条件
then
        命令
else
        命令
fi

if elif else语法
if 条件
then
        命令
elif
        命令
else
        命令
fi

Linux任何命令的执行都会有一个退出状态,当它退出的时候,都会返回一个比较小的整数值给调用他的程序

test 

功能

对整数比较测试

对字符串

对文件测试

test 数字1 options 数字2

整数比较

 字符串比较

 文件测试

 case

case 值 in
匹配模式1)
    命令
    ;;
匹配模式2)
    命令
    ;;
esac

while循环 

while 条件
do
    命令
    continue; #表示结束本次循环
    break; 表示结束当前循环
done

until语句

循环条件同while相反,循环为false才会一直循环

until 条件
do
    命令
    continue; #表示结束本次循环
    break; 表示结束当前循环
done

for语句

for var in test1 test2 test3
do
    命令
done


for var in {start..end}
do
    命令
done

select语句

使用select进行菜单选择操作

select var in menu1 menu2 ...
do
    命令
done

note:select式无限循环,输入空值,或者输入的值无效都不会结束循环,只有遇到break才会结束循环

shell函数

系统函数

函数是有若干shell命令组成的语句块

basename函数

用于获取文件名

basename [string / pathname] [suffix]

dirname 

从指定文件绝对路径,去除文件名,返回剩下的目录

自定义函数

语法

[ function ] funname()

{
         命令
        [return 返回值]       
}        

调用函数:funname 传递参数1 传递参数2...

return 如果不加,将以最后一条命令运行结果作为返回值,(范围为0~255)

有参函数

shell程序与函数区别

shell程序在子shell中运行,会开启独立的进程运行

shell函数在当前shell的进程中运行

shell重定向

每个Linux系统在运行的时候都会打开三个文件

1.stdin 获取键盘输入数据,文件描述符 0

2.stdout 将正确数据输出到显示器上 1

3.stderr 将错误信息输入到显示器上 2

改变输入方向,数据从非键盘位置流入,这就是输入重定向

改变输出方向,数据从非显示器位置流出,这就是输出重定向

语法如下

 shell好用的工具 

cut

使用cut可以切割提取指定列,字符,字节的数据,可以将文本按列进行划分,cut命令逐行读入文本,然后按列划分

cut [options] filename

sed

流编辑器,非交互流式文本编辑器 vim是交互式文本编辑器

语法:sed [选项参数] [模式匹配/sed程序命令] [文件名]

 

 $代表最后一行

案例:

删除奇数行

sed ‘1~2d’ sed.txt

删除1到3行

sed '1,3d' sed.txt

删除最后一行

sed '$d' sed.txt

删除匹配ww的行

sed ‘/ww/d’ sed.txt

查询匹配的内容

sed -n '/ww/p' sed,txt

替换ww为jj

sed ‘s/ww/jj/g’ sed,txt 

这里的g表示全局替换

sed -e 第一个命令 -e 第二个命令 sed.txt

或者在命令中以分号隔开

sed缓存区数据交换

sed处理文件是逐行处理的

sed没读取一行,就存放进入模式空间,sed还有一个空间叫做暂存空间,开始时只有一个空行

使用sed命令可以实现这两个空间数据的交互

 awk

强大的文本分析工具

语法 awk [options] 'pattern{action}' {filename}

 打印文件第二行

awk -F ":" 'NR==2{printf("filename:%s\n","FILENAME")}' passwd

sort

排序

sort (options)参数

 根据第二列内容进行排序

sort -t " " -k2n,2 -uk1,2 sort.txt


网站公告

今日签到

点亮在社区的每一天
去签到