shell脚本学习笔记

删除某几列:awk '{$1=""; $2=""; $3=""; $4=""; $5="";sub("     ", ""); print}' aa.txt >> bb.txt

指定awk的分隔符:cat ff5.txt | awk -F '|' '{print $1,$3}' >> ret33.txt

 

复制代码
给镜像打tag

#! /usr/bin/env bash

deploy_conf=$1

for srcimage in `cat $deploy_conf`
do
    newimage=`echo $srcimage | awk  -F '/' '{print $NF}' `
    destimage='172.20.5.11/cupid'/$newimage
    echo $destimage
    docker tag $srcimage $destimage
    docker push  $destimage
done#
复制代码

 

#!/bin/bash 不具有适应性,可以改成 #!/usr/bin/env bash,它会到PATH环境变量中找bash
可以用下面的命令查看本机支持的解释器:cat /etc/shells

复制代码
#!/usr/bin/env bash
my()
{
        if [ $# != 2 ]
                then echo "not equal"
        else
                echo "equla"
        fi
        }
my “$@”
复制代码

太长使用反斜杠分行,反斜杠前要有空格

./configure \
–prefix=/usr \
–sbin-path=/usr/sbin/nginx \
–conf-path=/etc/nginx/nginx.conf \

在使用"$"来获取变量的时候最好加上双引号
var="*.sh"
echo $var
echo "$var"
他的运行结果如下:
a.sh
*.sh

==实现类似的main函数

复制代码
#!/usr/bin/env bash
func1(){  
}
func2(){ 
}

main(){
    func1
    func2
}
main "$@"
复制代码

在没有任何限定说明的情况下,shell默认变量属于全局类型(变量v1的作用域从被定义的地方开始,到shell结束)

函数参数为局部类型,只能在当前函数内部使用。

向文件里写数据

cat>>./temp.conf << EOF
log file = /usr/local/logs/rsyncd.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
EOF

 在脚本里直接执行pwd获得的是当前shell脚本的执行路径,而不是当前脚本的所在路径应当先cd进当前脚本的目录然后再pwd

 ===shell中最简单的并行化是通过"&"以及"wait"命令来做:

这里并行的次数不能太多,否则机器会卡死。稍微正确的做法比较复杂,以后再讨论
复制代码
#!/usr/bin/env bash
func()
{
           echo $1
}
for((i=0;i<10;i++))
do
    func $i  &
done
wait
echo "oooo"
复制代码

 显示包含"hhh"的行到包含"omc"的行之间的行: sed -n '/hhh/,/omc/p' yum.log

多个变量的替换:find . -name '*.txt' |xargs sed -i "s/233/666/g;s/235/626/g;s/333/616/g;s/233/664/g"

find . -name '*.txt' |xargs -P $(nproc) sed -i "s/233/666/g;s/235/626/g;s/333/616/g;s/233/664/g"
-P参数指定并行度

尽量使用func(){}来定义函数,而不是func{}
尽量使用$()将命令的结果赋给变量,而不是反引号
尽量使用[[]]来代替[]
在复杂的场景下尽量使用printf代替echo进行回显
这些新写法很多功能都比旧的写法要强大,用的时候就知道了。

使用cp -r命令复制文件夹的时候要注意如果目的文件夹不存在则会创建,如果存在则会复制到该文件的子文件夹下

简单的if尽量使用&& ||,写成单行。比如[[ x > 2]] && echo x

============

交互式shell脚本:expect就是一个专门用来实现自动交互功能的工具

posted on   我和你并没有不同  阅读(225)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示