百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

linux shell 笔记——1

moboyou 2025-03-26 11:46 15 浏览

shell的格式开头

#!/bin/bash 或者 #!/bin/sh 开头

系统变量:HOME、HOME、HOME、PWD、SHELL、SHELL、SHELL、USER ,PATH等等比方:echo $HOME 等等..

输出

echo $HOME
test="1234566"

截取字符串

${变量名:起始:长度}

echo $test 等价于 echo ${test}

1) 定义变量:变量=值

2)显示当前 shell 中所有变量:set

3)撤销变量:unset 变量

4) 声明静态变量:readonly 变量,注意:不能 unset

https://baijiahao.baidu.com/s?id=1701686693229076458&wfr=spider&for=pc

定义变量的规则

1) 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。

2) 等号两侧不能有空格3) 变量名称一般习惯为大写

将命令的返回值赋给变量(重点)

1)A=`ls -la` 反引号,运行里面的命令,并把结果返回给变量 A2)A=$(ls -la) 等价于反引号

设置环境变量的基本语法:

export 变量名=变量值 (功能描述:将 shell 变量输出为环境变量)

source 配置文件(功能描述:让修改后的配置信息立即生效)

echo $变量名(功能描述:查询环境变量的值)

运算 :

方式1: expr $val oparator $var2

方式2:aa= $(( $val oparator $var2 ))

方式2必须要赋值,否则报错



grep解析 :

pid=`ps -ef|grep run.jar|grep -v grep|awk '{print $2}' `

grep -v grep 是干啥的呢 ?很简单 ,为了去除包含grep的进程行 ,避免影响最终数据的正确性 。



ps -ef|grep gogs

isTester.com 1883 1844 0 13:55 pts/0 00:00:00 grep gogs

git 6583 1 0 2018 ? 01:25:46 ./gogs web

加上grep -v grep ,就只剩下1行记录 。

[isTester.com@iZ94b31ttqsZ]~# ps -ef|grep gogs | grep -v grep

git 6583 1 0 2018 ? 01:25:46 ./gogs web


grep -v 意为不包括;上述语句的意思是查找除了grep下的所有信息






$2:表示第二个字段

print $2 : 打印第二个字段

awk '{print $2}' $fileName : 一行一行的读取指定的文件, 以空格作为分隔符,打印第二个字段


比如有个文件是testAWK.txt,文件内容如下:

11 22 33 44

55 66 77 88

执行 awk '{print $2}' testAWK.txt

结果:

22

66




ps -ef|grep gogs | grep -v grep | wc -l

wc -l 统计行数





if解析


#如果 pid变量的长度为0,则为真

if[ -z "$pid"] then

return 1


else

return 0


fi



#$? 是上一个程序执行是否成功的标志,如果执行成功则$? 为0,否则 不为0

is_exist #执行函数

if[ $? -eq "0" ] then

return 1


else

return 0

fi




Shell 数组元素个数${#array[@]}

数组的所有元素${array[*]}

字符串长度${#str}

数组下标集合${!array[@]} 如:0 1 2 3




################### 第1种 #######################

for i in ${array[@]}

#也可以写成for element in ${array[*]}

do

echo $i

done



################## 第2种 ########################

array=($(ls)) #注意多一个括号

for i in ${array[*]}

do

echo $i ;

done


################## 第3种 ########################

array=($(ls)) #注意多一个括号

for i in ${array[*]}

do

echo $i ;

done



################## 第4种 ########################

array=$(ls) #注意少一个括号

for i in $array do


echo $i;

done;


################## 第5种 ########################

for i in "${!array[@]}" ; do

echo ${array[i]};

done;


find

1. 在/root下查找文件更新日是在距现在时刻二天以内的文件

# find /root/ -mtime -2

2. 在/root下查找文件更新日是在距现在时刻二天以上的文件

# find /root/ -mtime +2

3.在/root下查找文件更新日是在距现在时刻一天以上二天以内的文件

# find /root/ -mtime 2



exec命令

ls与find结合使用

find ./ -name "UserServic*Impl*" -exec ls -l {} \;

语法:find pathname -option [-print ] [ -exec | -ok command ] {} \;



exec 文件重定向

shell的exec内建命令并不启用新的shell,而是用要执行的命令替换当前的shell进程,并将老进程的环境清理掉,而且exec命令后的其他命令不再执行


#!/bin/bash

2

3 echo "hello mysql"

4 exec echo " hello oracle"

5 echo "hello db2"


第5行代码将不执行,因为线程已终止



文件描述符

https://blog.csdn.net/weixin_55972781/article/details/118254368

inux默认文件描述符:

每打开一个shell就会打开默认的三个文件描述符描0,1,2分别代表【标准输入】和【标准输出】及【标准错误输出】

linux每一个打开文件都会关联一个文件描述符,需要的时候我们可以使用exec命令指定一个大于3的数字作为文件


1)# exec 3</tmp/1.txt //以“只读方式”打开/tmp/1.txt,文件描述符对应为3

2)# exec 3>/tmp/1.txt //以“只写方式”打开/tmp/1.txt,文件描述符对应为3

3)# exec 3<>/tmp/1.txt //以“读写方式”打开/tmp/1.txt,文件描述符对应为3

4)# exec 3<&- //关闭文件描述符3


脚本测试


#脚本测试

#!/bin/bash
exec 4>&1 #用4记录标准输出
exec 1>/tmp/abc #重定向标准输出
echo "123"
echo "456"
exec 1>&4 #恢复标准输出
exec 4>&- #关闭4

(运行此脚本,脚本中的echo输出会输出到/tmp/abc文件中,脚本第二行用4>&1 是为了记录标准输出的文件描述符便于执行完毕后恢复标准输出,

恢复标准输出也可以用exec 1>/dev/tty)

#注:

echo "hello" >&4 向文件描述符中输入内容只使用 > 不能用 >> ,此时的 > 不会清空文件,

是否清空文件需要在exec命令关联文件描述符到文件的时候区别使用 > 或 >>

#例如下脚本:

#!/bin/bash
exec 4>/tmp/abc
echo "123" >&4
echo "456" >&4
exec 4>&-

则每次执行完脚本后/tmp/abc文件内容都是123\n456,若把第二行换成exec 4>>/tmp/abc则会追加进去(文件的清空操作是在exec命令的操作时进行的)

sed用法

sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`

for f in $(find * | grep opt-boot.sh); do sed -i "s#/home/spring-boot#/home/cater/spring-java#g" $f; done



查看目录下文件个数

当前目录下

ls -l | grep "^-"| wc -l

查看指定目录下的文件个数

ls -l specified_dir | grep "^-"| wc -l

递归查找

ls -lR | grep "^-"| wc -l


ls -l :长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录、链接、设备文件等)


grep "^-" 表示-开头的,这里将长列表输出信息过滤一部分,只保留一般文件,如果只保留目录就是 ^d

wc -l 统计输出信息的行数,因为已经过滤得只剩一般文件了,所以统计结果就是一般文件信息的行数,又由于

一行信息对应一个文件,所以也就是文件的个数



如:

drwxr-xr-x 2 cater cater 12288 May 19 16:26 lib

-rw-rw-r-- 1 cater cater 250656 Jun 14 11:04 log.out

-rw-rw-r-- 1 cater cater 1955683 Jun 14 11:07 member-shopper-system-1.0.jar




demo1

https://blog.csdn.net/qq_38686676/article/details/124814424

1.编写一个shell脚本,它把第二个位置参数及其以后的各个参数指定的文件拷贝到第一个位置参数指定的目录中。

#!/bin/bash


dir=$1

shift #将位置参数移动一位(即原先的第二个位置参数现在变成了第一个位置参数,依次类推)

while [ $1 ]
do
file=$1
cp $file $dir
shift
done

ls $dir





echo $0 # 当前脚本的文件名(间接运行时还包括绝对路径)。

echo $n # 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是 $1 。

echo $# # 传递给脚本或函数的参数个数。

echo $* # 传递给脚本或函数的所有参数。

echo $@ # 传递给脚本或函数的所有参数。被双引号 (" ") 包含时,与 $* 不同,下面将会讲到。

echo $? # 上个命令的退出状态,或函数的返回值。

echo $ # 当前 Shell 进程 ID。对于 Shell 脚本,就是这些脚本所在的进程 ID。

echo $_ # 上一个命令的最后一个参数

echo $! # 后台运行的最后一个进程的 ID 号



递归问题:

$? 所能传递的最大值是255 解决这个问题的方法有两种,一种是利用全局变量,另外一种则是利用其他方式进行周转(例如标准输

入输出设备echo实现也可以

return

只能返回数字,不能返回字符串

相关推荐

Excel技巧:SHEETSNA函数一键提取所有工作表名称批量生产目录

首先介绍一下此函数:SHEETSNAME函数用于获取工作表的名称,有三个可选参数。语法:=SHEETSNAME([参照区域],[结果方向],[工作表范围])(参照区域,可选。给出参照,只返回参照单元格...

Excel HOUR函数:“小时”提取器_excel+hour函数提取器怎么用

一、函数概述HOUR函数是Excel中用于提取时间值小时部分的日期时间函数,返回0(12:00AM)到23(11:00PM)之间的整数。该函数在时间数据分析、考勤统计、日程安排等场景中应用广泛。语...

Filter+Search信息管理不再难|多条件|模糊查找|Excel函数应用

原创版权所有介绍一个信息管理系统,要求可以实现:多条件、模糊查找,手动输入的内容能去空格。先看效果,如下图动画演示这样的一个效果要怎样实现呢?本文所用函数有Filter和Search。先用filter...

FILTER函数介绍及经典用法12:FILTER+切片器的应用

EXCEL函数技巧:FILTER经典用法12。FILTER+切片器制作筛选按钮。FILTER的函数的经典用法12是用FILTER的函数和切片器制作一个筛选按钮。像左边的原始数据,右边想要制作一...

office办公应用网站推荐_office办公软件大全

以下是针对Office办公应用(Word/Excel/PPT等)的免费学习网站推荐,涵盖官方教程、综合平台及垂直领域资源,适合不同学习需求:一、官方权威资源1.微软Office官方培训...

WPS/Excel职场办公最常用的60个函数大全(含卡片),效率翻倍!

办公最常用的60个函数大全:从入门到精通,效率翻倍!在职场中,WPS/Excel几乎是每个人都离不开的工具,而函数则是其灵魂。掌握常用的函数,不仅能大幅提升工作效率,还能让你在数据处理、报表分析、自动...

收藏|查找神器Xlookup全集|一篇就够|Excel函数|图解教程

原创版权所有全程图解,方便阅读,内容比较多,请先收藏!Xlookup是Vlookup的升级函数,解决了Vlookup的所有缺点,可以完全取代Vlookup,学完本文后你将可以应对所有的查找难题,内容...

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数在电商运营、物流对账等工作中,经常需要统计快递“揽收到签收”的耗时——比如判断某快递公司是否符合“3天内送达”的服务承...

Excel函数公式教程(490个实例详解)

Excel函数公式教程(490个实例详解)管理层的财务人员为什么那么厉害?就是因为他们精通excel技能!财务人员在日常工作中,经常会用到Excel财务函数公式,比如财务报表分析、工资核算、库存管理等...

Excel(WPS表格)Tocol函数应用技巧案例解读,建议收藏备用!

工作中,经常需要从多个单元格区域中提取唯一值,如体育赛事报名信息中提取唯一的参赛者信息等,此时如果复制粘贴然后去重,效率就会很低。如果能合理利用Tocol函数,将会极大地提高工作效率。一、功能及语法结...

Excel中的SCAN函数公式,把计算过程理清,你就会了

Excel新版本里面,除了出现非常好用的xlookup,Filter公式之外,还更新一批自定义函数,可以像写代码一样写公式其中SCAN函数公式,也非常强大,它是一个循环函数,今天来了解这个函数公式的计...

Excel(WPS表格)中多列去重就用Tocol+Unique组合函数,简单高效

在数据的分析和处理中,“去重”一直是绕不开的话题,如果单列去重,可以使用Unique函数完成,如果多列去重,如下图:从数据信息中可以看到,每位参赛者参加了多项运动,如果想知道去重后的参赛者有多少人,该...

Excel(WPS表格)函数Groupby,聚合统计,快速提高效率!

在前期的内容中,我们讲了很多的统计函数,如Sum系列、Average系列、Count系列、Rank系列等等……但如果用一个函数实现类似数据透视表的功能,就必须用Groupby函数,按指定字段进行聚合汇...

Excel新版本,IFS函数公式,太强大了!

我们举一个工作实例,现在需要计算业务员的奖励数据,右边是公司的奖励标准:在新版本的函数公式出来之前,我们需要使用IF函数公式来解决1、IF函数公式IF函数公式由三个参数组成,IF(判断条件,对的时候返...

Excel不用函数公式数据透视表,1秒完成多列项目汇总统计

如何将这里的多组数据进行汇总统计?每组数据当中一列是不同菜品,另一列就是该菜品的销售数量。如何进行汇总统计得到所有的菜品销售数量的求和、技术、平均、最大、最小值等数据?不用函数公式和数据透视表,一秒就...