一日一脚本--- dirname

本文详细解析了脚本中使用$0和dirname指令获取当前脚本路径的方法,并展示了如何利用这些信息进行路径跳转操作。通过实例,读者可以深入了解脚本执行环境和路径管理的重要性。

每日一收获  cd `dirname $0` $0 代表的是你执行的脚本!若是在命令行下的 因为你执行的是 bash 而 bash 在/bin 目录下 ,dirname就是得到$0的目录下。所以在命令行下得到的结果就是/bin 

 若是在脚本中,那么就是 $0 代表的是写的脚本 ,比如说脚本a.shell 在 dirname $0  < ===== > dirname a.shell . man dirname下 

 

  

 

 Print NAME with its trailing /component removed; if NAME contains no /'s, output `.' (meaning the current directory).

 

 

 我们可以知道得到是脚本当前的路径,就是 (.)符号

 

用途:这个脚本的作用在于获取系统的相对路径,然后跳转到其他目录下!

 

哈哈,谁知道下面这个脚本是干什么的呢,猜中有奖!

 

find . -type f |grep java$|xargs du -h |sed -e 's/K//g' |awk 'BEGIN{maxsize=0;filename=temp}$1>maxsize{maxsize=$1;filename=$2}END{printf "%s\t%s\n",maxsize,filename}'
 
#!/bin/bash DEVICE="${1:-/dev/sda1}" # 默认设备路径(调试用) DEFAULT_MOUNT_POINT="/mnt/usb" # 动态生成挂载点 # 配置日志文件 LOG_FILE="/home/udeer/usb_udev/logs/usb_mount_$(date +'%Y%m%d_%H%M%S').log" mkdir -p "$(dirname "$LOG_FILE")" exec > >(tee -a "$LOG_FILE") 2>&1 # 日志函数 log() { local level="$1" local msg="$2" echo -e "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $msg" } log "检测到设备: $DEVICE" # 动态获取挂载点(优先使用UUID匹配) UUID=$(blkid -o value -s UUID "$DEVICE" 2>/dev/null) if [ -n "$UUID" ]; then MOUNT_POINT=$(findmnt -n -o TARGET -U "$UUID" 2>/dev/null) else MOUNT_POINT=$(findmnt -n -o TARGET --source "$DEVICE" 2>/dev/null) fi # 如果未挂载,尝试自动挂载 if [ -z "$MOUNT_POINT" ]; then log "警告:设备未挂载,尝试自动挂载 (UUID=$UUID, DEVICE=$DEVICE)" # 检查设备是否存在 if [ ! -b "$DEVICE" ]; then log "错误:设备不存在 ($DEVICE)" exit 1 fi # 检查文件系统类型(需安装对应工具,如ntfs-3g/exfat-fuse) FSTYPE=$(blkid -o value -s TYPE "$DEVICE" 2>/dev/null) if [ -z "$FSTYPE" ]; then log "错误:无法识别文件系统类型 ($DEVICE)" exit 1 fi # 创建挂载点并尝试挂载 mkdir -p "$DEFAULT_MOUNT_POINT" if ! mount -t "$FSTYPE" "$DEVICE" "$DEFAULT_MOUNT_POINT"; then log "错误:挂载失败 (DEVICE=$DEVICE, FSTYPE=$FSTYPE, MOUNT_POINT=$DEFAULT_MOUNT_POINT)" exit 1 fi MOUNT_POINT="$DEFAULT_MOUNT_POINT" log "挂载成功: $MOUNT_POINT" else log "已挂载: $MOUNT_POINT" fi # 后续操作(示例:列出挂载点内容) log "挂载点内容:" ls -l "$MOUNT_POINT" >> "$LOG_FILE" 2>&1 sleep 2 log "查询所有设备挂载点:" df -h >> "$LOG_FILE" 2>&1 sleep 2 log "可以进行自动化脚本执行操作或处理!" # 执行 python 发送dingtalk消息 export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" export PYTHONPATH="/usr/lib/python3/dist-packages" # LOG_FILE="/var/log/dingtalk_udev.log" log "执行钉钉通知脚本" /usr/bin/python3 /home/udeer/usb_udev/scripts/dingtalk_start_msg.py if [ $? -eq 0 ]; then log "启动消息发送成功" else log "启动消息发送失败" fi sleep 10 log "脚本刷写完成" /usr/bin/python3 /home/udeer/usb_udev/scripts/dingtalk_finsh_msg.py if [ $? -eq 0 ]; then log "完成消息发送成功" else log "完成消息发送失败" fi sleep 2 sync 确保可以通过udev规则全部执行
07-27
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值