Linux | shell脚本封装模板(内含资源分享)

文摘   2024-08-20 11:29   江苏  

通过封装,可以将常用的代码块或功能模块化,便于在不同的脚本或项目中重复使用,提高开发效率。本文介绍shell脚本的一个简单封装模板,文末附pdf资源赠送。

参数传递

通过封装,可以将一些常变的值作为参数传入,使得脚本更加灵活,适应不同的使用场景。shell脚本可以通过位置参数(如$1, $2等)来进行参数传递。其中$1是第一个参数,$2是第二个参数,依此类推。$0通常是脚本本身的名称。$#表示传递给脚本的参数总数。$@$*表示所有传递给脚本的参数。

#!/bin/bash
# 脚本名:example.sh

echo "脚本名:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "参数总数:$#"
echo "所有参数(使用\$*):$*"
echo "所有参数(使用\$@):$@"c

运行该脚本

bash example.sh param1 param2 param3

则输出

脚本名:example.sh
第一个参数:param1
第二个参数:param2
参数总数:3
所有参数(使用$*):param1 param2 param3
所有参数(使用$@):param1 param2 param3

位置参数示例

以下演示创建一个简单shell脚本,用于查找并显示某一个用户的登录信息。

cat >find.sh 
#!/bin/sh
#finduser—查看第一个参数指定的用户是否登录
who |grep $1
^D
chmod +x find.sh
/find.sh rna

chmod +x find.sh修改了find.sh文件的权限,添加执行(x)权限,使得文件成为可执行脚本。执行find.sh脚本,传递rna作为参数,将会检查用户rna是否登录到系统中。

命名参数

如果你想让脚本更加灵活和易于理解,你可以使用命名参数。这通常需要使用getopts或手动解析$@(所有参数的列表)。以下是一个使用手动解析方法来接受命名参数的简化示例:

#!/usr/bin/bash

# 定义使用说明函数
usage() {
  echo "Usage: $0 [options]"
  echo "Options:"
  echo "  -h, --help            显示帮助信息"
  echo "  -o, --out_dir PATH    指定结果输出路径"
  echo "  -s, --outs PATH       指定cellranger atac输出路径,写到outs。ie: gss1/home/2024/batch_2/01.data/Cg/outs"
  exit 1
}

# 初始化变量
out_dir=""
outs=""

# 解析命令行参数
while truedo
  case "$1" in
    -h|--help)
      usage
      ;;
    -o|--out_dir)
      out_dir="$2"
      shift 2
      ;;
    -s|--outs)
      outs="$2"
      shift 2
      ;;
    --)
      shift
      break
      ;;
    *)
      if [ -n "$1" ]; then
        echo "无法识别的选项: $1"
        usage
      else
        break
      fi
      ;;
  esac
done

# 检查必要的参数是否已经被传递
if [ -z "$out_dir" ] || [ -z "$outs" ]; then
  echo "缺少必要的参数。"
  usage
fi

该脚本创建了通过解析命令行参数来接收用户输入的信息。它支持两种参数:-o 或 --out_dir:指定结果输出路径。-s 或 --outs:指定cellranger atac输出路径。

资源分享

转发本公众号任意一篇内容至朋友圈,截图发到一只羊(vx),并备注Linux资源即可,将在当天统一回复。

END


#

付费视频

#

推荐阅读

🔗单细胞测序🔗scRNA-seq高级分析🔗scATAC-seq🔗R包开发🔗源码拆解🔗测试🔗RNA-seq🔗其它生信分析🔗R语言🔗Python🔗环境配置🔗文献分享🔗一只羊的碎碎念

#

关于我

分享内容:分子标记开发及种质资源鉴定、单细胞多组学数据分析、生信编程、算法原理、文献分享与复现等...

点个赞再走!


你好我是一只羊
个人号,内容主要涉及种质资源、分子标记开发及遗传多样性分析,表观遗传、编程语言在生物信息学中的应用、转录组、基因组、单细胞测序多组学数据分析等;其它更新平台:B站&小红书-一只羊做生信/捡羊毛的咩/生信小羊🐑
 最新文章