远在天边,近在眼前,熟悉shell(bash、fish),却又从未真正深入了解过,借此机会学习一下吧~
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
| #!/usr/bin/env bash set -euo pipefail
BUNDLE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$BUNDLE_ROOT"
TEMPERATURES="${TEMPERATURES:-600 700 800}" STEPS="${STEPS:-20000}"#如果未定义或为空,则使用默认值2000 SAVE_INTERVAL="${SAVE_INTERVAL:-100}"#每特定步数保存一次轨迹/数据 STRUCTURES="${STRUCTURES:-bulk_ordered gb_Sigma3_t3 gb_Sigma3_t3_Li_vac_c1_s1}"
echo "[INFO] bundle_root = $BUNDLE_ROOT" echo "[INFO] temperatures_K = $TEMPERATURES" echo "[INFO] steps = $STEPS" echo "[INFO] save_interval = $SAVE_INTERVAL" echo "[INFO] structures = $STRUCTURES"
for structure_id in $STRUCTURES; do for temp in $TEMPERATURES; do echo echo "[RUN] structure=$structure_id temp=${temp}K steps=$STEPS" MD_TEMP="$temp" \ MD_STEPS="$STEPS" \ MD_SAVE_INTERVAL="$SAVE_INTERVAL" \ bash 03_scripts/run_md_single.sh "$structure_id" done done
echo echo "[DONE] conductivity batch finished"
|
shell是一个用C语言编写的程序,它是用户使用 Linux 的桥梁,既是一种命令语言,又是一种程序设计语言。
Linux的shell众多,包括:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
我们重点关注bash。
脚本的第一行,#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
shell变量的定义:
需要注意:
- 变量名和等号之间不能有空格
- 不能以数字开头
- 不允许使用关键字
- 习惯使用大写字母表示常量
- 空格通常用于分隔命令和参数,因此避免使用空格
使用一个定义过的变量,只要在变量名前面加美元符号$即可。
只读变量readonly:
1 2
| myURL="https://hydrogen1222.com.cn" readonly myURL
|
使用unset命令可以删除变量,但不可以删除只读变量:
${BASH_SOURCE[0]}是一个特殊shell变量,指当前执行的脚本文件路径
$PWD指定当前所在的目录
${VAR:-default}:如果变量 VAR 未设置或为空,使用默认值