菜单

Shell基础开首学习,Shell基础学习

2019年8月24日 - UNIXSolaris

打闹解压:

#!/bin/bash          # !/bin/bash 表示在当前路径下查找
# Usage:             ##表示注释,且只能一行一行注释;多行时用大括号括起来不调用就没关系

 #set 显示系统中已经存在的shell变量,设置变量的新变量值,- 表示关闭;+表示打开;

set -x              # x表示执行指令后,会先执行该指令以及所下的参数
set -e              # e表示若指令传回值不等于0,则立即退出shell

export PYTHONUNBUFFERED="True"  #设置环境变量

GPU_ID=$1       #变量以及赋值
NET=$2
NET_lc=${NET,,}
DATASET=$3

array=( [email protected] )
len=${#array[@]}
EXTRA_ARGS=${array[@]:3:$len}
EXTRA_ARGS_SLUG=${EXTRA_ARGS// /_}

case $DATASET in
  pascal_voc)
    TRAIN_IMDB="voc_2007_trainval"
    TEST_IMDB="voc_2007_test"
    PT_DIR="pascal_voc"
    ITERS=40000
    ;;
  coco)
    TRAIN_IMDB="coco_2014_train"
    TEST_IMDB="coco_2014_minival"
    PT_DIR="coco"
    ITERS=280000
    ;;
  *)
    echo "No dataset given"
    exit
    ;;
esac

LOG="experiments/logs/fast_rcnn_${NET}_${EXTRA_ARGS_SLUG}.txt.`date +'%Y-%m-%d_%H-%M-%S'`"
exec &> >(tee -a "$LOG")
echo Logging output to "$LOG"

time ./tools/train_net.py --gpu ${GPU_ID} \
  --solver models/${PT_DIR}/${NET}/fast_rcnn/solver.prototxt \
  --weights data/imagenet_models/${NET}.v2.caffemodel \
  --imdb ${TRAIN_IMDB} \
  --iters ${ITERS} \
  ${EXTRA_ARGS}

set +x
NET_FINAL=`grep -B 1 "done solving" ${LOG} | grep "Wrote snapshot" | awk '{print $4}'`
set -x

time ./tools/test_net.py --gpu ${GPU_ID} \
  --def models/${PT_DIR}/${NET}/fast_rcnn/test.prototxt \
  --net ${NET_FINAL} \
  --imdb ${TEST_IMDB} \
  ${EXTRA_ARGS}

要么看完再读吧!
 

http://www.bkjia.com/Linuxjc/1300757.htmlwww.bkjia.comtruehttp://www.bkjia.com/Linuxjc/1300757.htmlTechArticleShell基础初步学习,Shell基础学习 Shell Shell
是一个用 C 语言编写的前后相继,它是顾客采纳 Linux 的大桥。Shell
既是一种命令语言,又是一种程序…

输出重定向


双引号

your_name='qinjx'
str="Hello, I know your are \"$your_name\"! \n"

双引号的长处:

双引号里可以有变量

双引号里能够出现转义字符

概述


Shell

Shell 是三个用 C 语言编写的次序,它是客户使用 Linux 的桥梁。Shell
既是一种命令语言,又是一种程序设计语言。

Shell
是指一种应用程序,那个应用程序提供了叁个分界面,客商通过这么些分界面访谈操作系统内核的服务。

Ken 汤普森 的 sh 是率先种 Unix Shell,Windows Explorer
是二个头名的图形分界面 Shell。

Shell 在线工具


特殊符号

图片 1

运行 Shell 脚本有二种方式:

1、作为可推行程序

将上边的代码保存为 test.sh,并 cd 到相应目录:

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本

静心,应当要写成 ./test.sh,并不是
test.sh,运营另外二进制的前后相继也同样,直接写 test.sh,linux 系统会去
PATH 里搜索有未有叫 test.sh 的,而唯有 /bin, /sbin, /usr/bin,/usr/sbin
等在 PATH 里,你的当前目录经常不在 PATH 里,所以写成 test.sh
是会找不到命令的,要用./test.sh 告诉系统说,就在当前目录找。

2、作为解释器参数

这种运市场价格势是,直接运维解释器,其参数正是 shell 脚本的公文名,如:

/bin/sh test.sh
/bin/php test.php

这种艺术运维的本子,不供给在率先行内定解释器信息,写了也没用。

管道符


只读变量

动用 readonly 命令能够将变量定义为只读变量,只读变量的值无法被转移。

下边包车型大巴例子尝试改换只读变量,结果报错:

#!/bin/bash
my="http"
readonly myUrl
my="https"

运维脚本,结果如下:

/bin/sh: NAME: This variable is read only.

输入重定向


读取数组

读取数组成分值的形似格式是:

${数组名[下标]}

例如:

valuen=${array_name[n]}

采纳@符号能够拿走数组中的全数因素,举例:

echo ${array_name[@]}

一声令下外号


Shell 字符串

字符串是shell编制程序中最常用最有效的数据类型(除了数字和字符串,也没啥别的体系好用了),字符串能够用单引号,也能够用双引号,也能够毫不引号。单双引号的界别跟PHP类似。

历史命令


Shell基础最先学习,Shell基础学习

Shell

选用变量

行使三个概念过的变量,只要在变量名前边加欧元符号就能够,如:

your_name="qinjx"
echo $your_name
echo ${your_name}

变量名外面的花括号是可选的,加不加都行,加花括号是为着帮忙解释器度和胆识别变量的境界,举例下边这种状态:

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

要是不给skill变量加花括号,写成echo “I am good at
$skillScript”,解释器就能把$skillScript当成叁个变量(其值为空),代码施行结果就不是我们盼望的理所当然了。

引入给全体变量加上花括号,那是个好的编制程序习贯。

已定义的变量,能够被再次定义,如:

your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

那样写是合法的,但只顾,首回赋值的时候不能够写$your_name=”alibaba”,使用变量的时候才加美元符($)。

多命令试行顺序


Shell 环境

Shell 编制程序跟 java、php
编程同样,只要有二个能编写代码的文件编辑器和多少个能解释实施的剧本解释器就足以了。

Linux 的 Shell 类别众多,常见的有:

Bourne Shell(/usr/bin/sh或/bin/sh) ——Bash

Bourne Again Shell(/bin/bash)

C Shell(/usr/bin/csh)

K Shell(/usr/bin/ksh)

Shell for Root(/sbin/sh)

……

Bash 是大相当多Linux 系统暗许的 Shell。一般景色下,并不区分 Bourne Shell
和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也能够改为
#!/bin/bash。

#! 告诉系统其后路线所钦赐的次序正是解释此脚本文件的 Shell 程序。


本子试行办法


收获数组的长短

获得数高管度的章程与收获字符串长度的措施同样,比如:

# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

拼接字符串

your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1

查找子字符串

寻觅字符 “i 或 s” 的职位:

string="runoob is a great company"
echo `expr index "$string" is`  # 输出 8

瞩目: 以上脚本中 “`” 是反引号,并不是单引号 “‘”。


Shell 数组

bash帮忙一维数组(不帮衬多维数组),而且未有限制数组的高低。

类似与C语言,数组元素的下标由0初始工编织号。获取数组中的成分要运用下标,下标能够是整数或算术表明式,其值应高于或等于0。

实例

#!/bin/bash
echo “Hello World !”
运营实例 ?

#! 是四个预订的标记,它告诉系统那个本子供给如何解释器来进行

变量类型

运维shell时,会同期设有二种变量:

1) 局地变量
局地变量在本子或指令中定义,仅在当前shell实例中央银立见成效,别的shell运营的顺序不能够访谈一些变量。

2) 遇到变量
全体的程序,包括shell运维的程序,都能访谈蒙受变量,有些程序须要情状变量来确定保证其健康运转。须求的时候shell脚本也得以定义意况变量。

3) shell变量
shell变量是由shell程序设置的新鲜变量。shell变量中有一部分是景况变量,有一对是一对变量,那个变量保险了shell的例行运作


Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的剧本程序。

产业界所说的 shell 经常都是指 shell 脚本,但shell 和 shell script
是多个不一样的定义。


除去变量

运用 unset 命令能够去除变量。语法:

unset variable_name

变量被删去后无法重新利用。unset 命令不可能去除只读变量。

概念数组

在Shell中,用括号来表示数组,数组成分用”空格”符号分割开。定义数组的一般方式为:

数组名=(值1 值2 ... 值n)

例如:

array_name=(value0 value1 value2 value3)

或者

array_name=(
value0
value1
value2
value3
)

还能独自定义数组的顺序分量:

array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

能够不采取连续的下标,何况下标的限定未有范围。

Shell 变量

概念变量时,变量名不加美元符号($,PHP语言中变量要求),如:

your_name="come"

瞩目,变量名和等号之间不能有空格,那只怕和你纯熟的具备编制程序语言都不均等。同期,变量名的命名须遵循如下准绳:

取名只好利用英语字母,数字和下划线,首个字符无法以数字最初。

高级中学档不可能有空格,能够选取下划线(_)。

不能够利用标点符号。

无法运用bash里的首要字(可用help命令查看保留主要字)。

除了显式地一直赋值,还足以用语句给变量赋值,如:

for file in `ls /etc`

上述语句将 /etc 下目录的文本名循环出来。


领取子字符串

以下实例从字符串第 2 个字符起首截取 4 个字符:

string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

Shell 注释

以”#”初始的行正是注释,会被解释器忽略。

sh里未有多行注释,只好每一行加三个#号。

假诺在支付进度中,遇到大段的代码必要方今注释起来,过会儿又撤销注释,怎么做吧?

每一行加个#标记太为难了,能够把这一段要解说的代码用一对花括号括起来,定义成三个函数,未有地方调用这么些函数,那块代码就不会推行,达到了和注释同样的效率。

收获字符串长度

string="abcd"
echo ${#string} #输出 4

第一个shell脚本

开垦文本编辑器(能够应用 vi/vim 命令来创立文件),新建三个文书
test.sh,扩大名称为sh(sh代表shell),扩大名并不影响脚本实践,见名知意就好,若是你用 php 写
shell 脚本,扩充名就用 php 好了。

输入一些代码,第一行一般是这么:

单引号

str='this is a string'

单引号字符串的限定:

单引号里的别样字符都会原样输出,单引号字符串中的变量是行不通的;

单引号字串中不可能冒出单引号(对单引号使用转义符后也特别)。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图