运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解

这篇具有很好参考价值的文章主要介绍了运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解,运维,服务器,linux



运维Shell脚本小试牛刀(一)

运维Shell脚本小试牛刀(二)

运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解

运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客






一: $(cd $(dirname $0); pwd) 命令详解

path = $(cd $(dirname $0); pwd)解析:

1、取当前运行脚本的所在路径: $0

2、取当前脚本所在路径的父目录: dirname

3、取返回的父目录的值: $(dirname $0)

4、cd到返回的父目录: cd “$(dirname “$0”)”

5、输出地址: $(cd $(dirname $0); pwd)

6、取输出的地址,并赋值给path: path = $(cd (dirname $0),pwd)

$0 获取运行脚本文件所在路径,在命令行种执行结果为 -bash

[root@www ~]# echo "$0"
-bash


二: Linux中变量#,@,0,1,2,*,$$,$? 普及

Linux中变量#,@,0,1,2,*,$$,$?的含义

$# 是传给脚本的参数个数

$0 是脚本本身的名字

$1 是传递给该shell脚本的第一个参数

$2 是传递给该shell脚本的第二个参数

$@ 是传给脚本的所有参数的列表

$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9

$$ 是脚本运行的当前进程ID号

$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误


区别:@@*

  • 相同点:都是引用所有参数
  • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数(分别存储在112 3)则"3)则"*" 等价于 “112 3"(传递了一个参数);而“3"(传递了一个参数);而“@" 等价于 "1""1""2" "$3"(传递了三个参数)

 小试牛刀一: 

[root@www tools]# cat commandList.sh

echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:$@"
echo "show parm list:$*"
echo "show process id:$$"
echo "show precomm stat: $?"


输出:

[root@www example]# ./commandList.sh 1 20 111 2 5 6 7 3
number:8
scname:./commandList.sh
first :1
second:20
argume:1 20 111 2 5 6 7 3
show parm list:1 20 111 2 5 6 7 3
show process id:3465
show precomm stat: 0
 


小试牛刀二:

[root@www example]# cat commandOutList.sh
#!/bin/sh
num=$#
name=$0
echo "number:$num"
echo "scname:$name"
echo $0
echo $1
echo $2

for ((i=0; i<$num; i++))
do
    echo "$i"
done

echo "argume:$@"
for key in $@
do
    echo $key
done
echo "-----------------"
for key in "$@"
do
    echo $key
done
echo "-----------------------------"
for key2 in $*
do 
    echo $key2
done
echo "-----------------"
for key2 in "$*"
do 
    echo $key2
done

echo "show process id:$$"
echo
echo "show precomm stat: $?"
 


输出内容:

[root@www example]# ./commandOutList.sh 
number:0
scname:./commandOutList.sh
./commandOutList.sh


argume:
-----------------
-----------------------------
-----------------

show process id:3514

show precomm stat: 0
 

[root@www tools]# sudo yum install rsync -y
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。 

三: 批量拷贝脚本

创建分发脚本文件:xsync   脚本内容

[root@www tools]#  cat ~/bin/xsync 

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi

#2. 遍历集群所有机器|docker0|docker1|docker2| 
for host in docker0 docker1 docker2
do
    echo ====================  $host  ====================
    
    #3. 遍历所有目录,挨个发送
    for file in $@
    do
        #4. 判断文件是否存在
        if [ -e $file ]
            then
                #5. 获取父目录
                pdir=$(cd -P $(dirname $file); pwd)
                #6. 获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done

 


小试牛刀一:

将jdk分发到docker1,docker2服务器上

[root@www bin]# ./xsync  /usr/local/tools/jdk-8u371-linux-x64.tar.gz  
==================== docker0 ====================
sending incremental file list

sent 66 bytes  received 12 bytes  156.00 bytes/sec
total size is 139,219,380  speedup is 1,784,863.85
==================== docker1 ====================
sending incremental file list
jdk-8u371-linux-x64.tar.gz

sent 139,253,473 bytes  received 35 bytes  39,786,716.57 bytes/sec
total size is 139,219,380  speedup is 1.00
==================== docker2 ====================
sending incremental file list
jdk-8u371-linux-x64.tar.gz

sent 139,253,473 bytes  received 35 bytes  39,786,716.57 bytes/sec
total size is 139,219,380  speedup is 1.00



小试牛刀二:

[root@www bin]# ./xsync /usr/local/zookeeper/

将解压后的zookeeper文件全拷贝到docker1|docker2机器:

[root@www bin]# ./xsync /usr/local/zookeeper/
==================== docker0 ====================
sending incremental file list

sent 61,605 bytes  received 227 bytes  123,664.00 bytes/sec
total size is 390,744,347  speedup is 6,319.45
==================== docker1 ====================
sending incremental file list

sent 61,613 bytes  received 235 bytes  123,696.00 bytes/sec
total size is 390,744,347  speedup is 6,317.82
==================== docker2 ====================
sending incremental file list

sent 61,613 bytes  received 235 bytes  123,696.00 bytes/sec
total size is 390,744,347  speedup is 6,317.82
 
 文章来源地址https://www.toymoban.com/news/detail-683474.html


到了这里,关于运维Shell脚本小试牛刀(三)::$(cd $(dirname $0); pwd)命令详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网页学习-小试牛刀

    分为三大部分: HTML 、 CSS 和 JavaScript 。 HTML(Hyper Text Markup Language,即超文本标记语言),网页骨架。 CSS(Cascading Style Sheets,层叠样式表),使页面变得美观、优雅,网页皮肤。 JavaScript(简称JS,是一种脚本语言),实现实时、动态、交互的页面功能,网页肌肉。 学习目的

    2023年04月22日
    浏览(51)
  • Mapreduce小试牛刀(1)

    1.与hdfs一样,mapreduce基于hadoop框架,所以我们首先要启动hadoop服务器 --------------------------------------------------------------------------------------------------------------------------------- 2.修改hadoop-env.sh位置JAVA_HOME配置,在JAVA_HOME前面加上export,重启主虚拟机,最好也把另外两个节点同位置的

    2024年02月04日
    浏览(31)
  • verilator——牛刀小试

    安装verilator可见:https://blog.csdn.net/qq_40676869/article/details/132648522?spm=1001.2014.3001.5501 编写一个异或的电路模块如下: top.v 编写C++测试文件 tb_top.cpp 编译并运行 –cc 将.v文件翻译成c++ –exe 创建可执行文件 –build verilator自动进行make –trace 记录波形 波形如下: github链接:https:/

    2024年02月10日
    浏览(30)
  • 快速上手kettle(二)小试牛刀

    目录 一 、前言 二 、两个小目标 三、 kettle核心概念介绍 3.1 转换 3.1.1 步骤(Step) 3.1.2 跳(Hop) 3.1.3 元素据 3.1.4 数据类型 3.1.5 并发执行 3.2 作业 四、实践操作 4.1 案例1 将csv文件转换成excel文件 4.1.1 在kettle中新建一个转换 4.1.2选择输入控件并设置 4.1.3 选择输出控件并设置 4.

    2024年02月06日
    浏览(30)
  • 【LED子系统】八、小试牛刀

    个人主页:董哥聊技术 我是董哥,高级嵌入式软件开发工程师,从事嵌入式Linux驱动开发和系统开发,曾就职于世界500强公司! 创作理念:专注分享高质量嵌入式文章,让大家读有所得!

    2024年02月06日
    浏览(31)
  • 手动开发-实现SpringMVC底层机制--小试牛刀

    在这里说的底层机制的实现主要是指:前端控制器、Controller、Service注入容器、对象自动装配、控制器方法获取参数、视图解析、返回json数据。 前端控制器就是核心控制器。在这里我们可以设计一个Servlet来充当核心控制器: LingDispatcherServlet.java .这个控制器的作用主要是接收

    2024年02月08日
    浏览(38)
  • 爬虫小试牛刀(爬取学校通知公告)

    完成抓取并解析DGUT通知公告12页数据,并提交excel文件格式数据,数据需要包含日期标题,若能够实现将详情页主体内容与发布人信息数据也一并抓取更佳 提交内容:Excel数据文件 首先看到页面呈现规则的各个方框,这意味着它们之间的一定是一样的 此处该有图 我们点开后

    2024年02月09日
    浏览(32)
  • 小试牛刀 -- Kali Linux安装在手机

         Kali Linux是基于Debian的Linux的发行版,里面有许多关于网络渗透的程序,是目前在网络安全领域经常使用的工具,因此为了便于学习,在此进行Kali Linux的安装,主要安装在华为P50上,操作系统是鸿蒙4.0。    2.1 Termux的安装及配置        (1)Termux的安装        在安装Te

    2024年01月23日
    浏览(38)
  • 牛刀小试---二分查找(C语言)

    二分查找,也叫折半查找,是一种在 有序数组 中查找特定元素的算法。它通过比较中间元素和目标值的大小,将查找范围缩小为一半,直到找到目标元素或者查找范围为空。  1. 确定搜索范围:首先,需要确定要在哪个区间内进行查找。这可以通过比较目标值与中间元素的

    2024年01月17日
    浏览(29)
  • Python OpenCV 牛刀小试(练习)

            OpenCV在读取图像时,默认的颜色空间是BGR(蓝绿红),而在大多数其他的图像处理库和图像格式中,使用的颜色空间是RGB(红绿蓝)。因此,当你需要使用OpenCV处理图像,然后将处理结果传递给其他库(如matplotlib、PIL等)进行进一步处理或显示时,你需要将颜色空间

    2024年02月21日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包