zoukankan      html  css  js  c++  java
  • Shell 变量及脚本使用

    使用 Shell 脚本来控制循环调节超参数

    • 调节超参数 guixj_lam (in {0.0, 0.1, 0.3, 0.5, 0.7, 1.0, 1.2, 1.4, 1.5, 1.7, 2.0, 3.0})
    mkdir guixj_citeseer
    for lam in 0.0 0.1 0.3 0.5 0.7 1.0 1.2 1.4 1.5 1.7 2.0 3.0    # 注意 shell 只要用空格隔开,则自动成为一个列表
    do
        python guixj_GCN.py --guixj-lam $lam --LP-step 1 --dataset citeseer > guixj_citeseer/"$lam".txt
    done
    
    • 使用不同随机数种子重复一百次实验:
    mkdir cora
    for num in $(seq 0 99) 
    do
      python train_grand.py  --hidden 32 --lr 0.01 --patience 200 --seed $num --dropnode_rate 0.5 > cora/"$num".txt
    done
    

    ps1: 注意这里的 $lam$num 变量,当用错了变量 $lam$, 相当于没有定义,是一个空值,例如: > cora/"$lam".txt, 会导致不生成 txt 文件,但也不报错,导致较难排除这一错误。

    ps2: shell 会把所有变量的值都当做字符串类型,但恰好 argparser 也是读取字符串类型,所以能够正常使用。

    for (( a = 1; a <= 3; a++ ))
    do
        for (( b = 1; b <= 3; b++ ))
        do
                echo "Inside loop: $a $b"
        done
    done
    

    ···································································· 分割线 ···········································································

    【LinuxShell脚本——变量和数据类型】: 本文主要学习了Shell脚本中的变量和数据类型。

    变量
    • 定义变量的语法
      定义变量时, 变量名和变量值之间使用“=”分隔,并且等号两边不能有空格变量名=变量值

    • 变量名规则
      变量名的定义必须遵循以下规则:

      1. 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
      2. 中间不能有空格,可以使用下划线。
      3. 不能使用标点符号。
      4. 不能使用bash里的关键字。
    • 使用变量
      使用一个定义过的变量,只要在变量名前面加美元符号即可,建议将变量名使用 {} 括起来之后再添加美元符号:
      echo ${name}

    • 修改变量为只读
      使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变,也不能被删除:
      readonly name

    • 删除变量
      使用unset命令可以删除变量,但不能删除只读变量:
      unset name

    • 位置参数
      运行Shell脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用 $n 的形式来接收。例如: $1 表示第一个参数, $2 表示第二个参数,依次类推。
      如果参数个数达到或者超过了10个,那么就得用 ${n} 的形式来接收了,例如: ${10} 、 ${23} 。 {} 的作用是为了帮助解释器识别参数的边界,这跟使用变量时加 {} 是一样的效果。

      • 脚本内容:
      #!/bin/bash
      echo "第一个参数 : $1"
      echo "第二个参数 : $2"
      
      • 脚本调用:
       [root@localhost ~]# sh test.sh A B
       执行结果:
       第一个参数 : A
       第二个参数 : B
      
    • 特殊变量
      除了位置参数以外,Shell中还有一些特殊变量,这些特殊变量描述了传入参数的某些信息:

      1 $0:当前脚本的文件名。
      2 $n:n是一个数字,表示第几个参数。
      3 $#:传递给脚本或函数的参数个数。
      4 $*:传递给脚本或函数的所有参数。当被双引号""包含时,会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。
      5 $@:传递给脚本或函数的所有参数。当被双引号""包含时,仍然将每个参数都看作一份数据,彼此之间是独立的。。
      6 $?:上个命令的退出状态,或函数的返回值。
      7 $$:当前Shell的进程ID。对于Shell脚本,就是这些脚本所在的进程ID。
      
    数据类型
    • 字符串

      1. 字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。

      2. 建议使用双引号,因为双引号里可以有变量和特殊字符,可以按照变量和特殊字符去使用。

        • 声明字符串类型的变量:
          name="Sam"

        • 拼接字符串:

         hello="hello, $name !"
        
    • 整数型

      在 Shell 中所有的变量默认都是字符串型。也就是说,如果不手工指定变量的类型,那么所有的数值都是不能进行运算的:

         [root@localhost ~]# a=1
         [root@localhost ~]# b=2
         [root@localhost ~]# c=$a+$b
         [root@localhost ~]# echo $c
              1+2
      

      如果想要进行数学运算,可以使用“(((运算式))”或“)[运算式]”方式运算:

         [root@localhost ~]# echo $(($a+$b))
         3
         [root@localhost ~]# echo $[$a+$b]
         3
      
    • 数组

      1. bash 支持一维数组(不支持多维数组),并且没有限定数组的大小。用括号来表示数组,数组元素用空格符号分割开。定义数组的一般形式为:
      2. 数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
    • 声明数组类型的变量:
      数组名=(值1 值2 ... 值n)
      也可以通过指定下标来声明:
      数组名[下标]=值

    • 获取数组指定下标的值:

      ${数组名[下标]}
      使用“@”符号可以获取数组中的所有元素:
      ${数组名[@]}
  • 相关阅读:
    准确率,召回率,F值
    残差
    字典学习
    深度学习
    cnn 滤波
    tensorflow
    kaggle 泰坦尼克
    python matplotlib
    数学家西蒙斯:华尔街最赚钱的基金经理
    Oracle学习笔记:删除数据空格(trim、ltrim、rtrim函数)
  • 原文地址:https://www.cnblogs.com/Gelthin2017/p/13991684.html
Copyright © 2011-2022 走看看