linux shell脚本

在写深度学习程序的时候,有时候变量太多或者需要自定义一些变量的时候我们一般讲运行命令写在shell脚本里,命名为train.sh

下面介绍了shell的基本命令和mmlab等中经常使用的shell操作

Shell运行

下面写一个简单的shell程序

#!/bin/bash
echo "Hello World !"

使用./train.sh来运行上述脚本,此程序的#!这句放在第一行告诉终端用什么解释器来运行shell脚本,一般我们都用bash就可以了,最终终端会输出"Hello World !"

如果./train.sh无法运行,可能是权限不够,在执行命令之前输入chmod +x train.sh即可

Shell变量

定义变量

知道怎么运行shell脚本之后,我们下面来定义shell中的变量,像其他编程语言一样,我们直接对变量赋值即可,如下

your_name="harry"

变量命名有一些基本的规则

  • 不能以数字开头
  • 不能使用标点符号
  • 变量和=中间不能有空格
  • 变量名中间不能有空格,但可以有下划线_

变量的使用需要加$符号,例如

your_name="harry"
echo $your_name
echo ${your_name}

其中花括号{}是可选地,但是为了书写规范和避免出现不必要的错误,例如${your_name}aaa,这里如果不加括号,变量名就会被误认为your_nameaaa,所以我们默认加上花括号即可

只读变量

只读变量一旦定义就不可被修改

your_name="harry"
readonly your_name

删除变量

your_name="harry"
unset your_name

Shell字符串

同其他编程语言相同,字符串也有单引号和双引号,但二者有所区别

单引号:单引号的所有内容均会原样输出,即单引号不能加变量和转义字符

双引号:双引号可以加变量和转义字符

# 使用单引号
your_name="harry"
str='Hello, I know you are \"$your_name\"! \n'
# output 
# Hello, I know you are \"$your_name\"! \n
# 使用双引号
your_name="harry"
str="Hello, I know you are \"$your_name\"! \n"
# output
# Hello, I know you are "harry"! \n

拼接字符串

可以用单引号''和双引号""拼接字符串

# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
# output
# hello, harry !
# hello, ${your_name} !
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
# output
# hello, harry !
# hello, harry !

Shell传递参数

下面向Shell中传递三个参数1,2,3

#!/bin/bash
echo "第零个参数:$0";
echo "第一个参数:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

我们在命令行输入./train.sh 1 2 3,输出结果如下

第零个参数:./train.sh
第一个参数:1
第二个参数为:2
第三个参数为:3

一般来说第0个参数不算参数,参数总量从1算起,123一共三个参数

一些特殊参数

参数说明
$#传递的参数个数

常用深度学习参数

mmediting的shell脚本

#!/usr/bin/env bash

CONFIG=$1
GPUS=$2
PORT=${PORT:-29500}

PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \
torchrun --nproc_per_node=$GPUS --master_port=$PORT \
    $(dirname "$0")/train.py $CONFIG --launcher pytorch ${@:3}

运行时执行CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 ./tools/dist_train.sh configs/file_data.py 8

  • CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7: 环境变量,不算在参数内
  • ./tools/dist_train.sh: 运行的脚本
  • configs/file_data.py: 第一个参数,配置文件
  • 8: 第二个参数,代表GPU的数量

接下来我们看一下dist_train.sh里面的内容

  • CONFIG=$1: 配置文件变量,等于传入参数的configs/file_data.py
  • GPUS=$2: GPU的数量,等于第二个传入参数8
  • PORT=${PORT:-29500}: 一种定义变量的方法,如果命令行不设置PORT的值,就是29500,如果设置了按照设置的来,设置方法PORT=2131 ./tools/dist_train.sh
  • PYTHONPATH="$(dirname $0)/..":$PYTHONPATH: 给python添加环境变量$(dirname $0)表示切换到train.sh所在目录,后面还有/..的原因是脚本是在tools文件夹下的,不是主目录。因此这句的意思是返回shell脚本所在目录的上一级目录,并将其加入到python环境中
  • ${@:3}: 表示命令行中第三个及之后的参数,这里我们一共只有两个参数,所以他就是空
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值