一,shell介绍

1,shell是外壳程序(区别于kernel),负责接收指令、调用内核执行程序、返回结果。它包围住内核,用户通过shell来操作内核,以此隐藏内核的复杂操作。


学习笔记:shell脚本基础操作_字符串

2,shell它有许多种解释器,如下图。bash就是其中一种。如在linux中。默认的是bin/bash

学习笔记:shell脚本基础操作_bash_02

3,shell和终端(terminal终点站)的区别曾经电脑很贵,所以每个用户只分配一台终端,仅包括显示器和键盘,许多个终端连接在一台电脑上,用户在终端中输入命令,从而调用shell解释器。而现在则是每台电脑都会自带一个终端模拟器,windows中的是conhost.exe,打开它后,它会自动打开cmd。Pycharm下面的terminal选项卡也是一个终端,它默认连接的是windows中的powershell解释器。而这是可以切换的,setting->tool

学习笔记:shell脚本基础操作_字符串_03

4,(1)Windows中有两个自带的shell。①cmd(Command shell)②powershell。

(2)Bash只有linux系统上有。

(3)但是windows在安装了git之后,会有一个git bash。它基于cmd解释器,但是额外添加了对一些linux命令和git命令的支持。但是windows可能对调用自己cmd命令行控件的第三方应用设了限制,所以说git bash可以识别大部分cmd命令。

注:Cmd中输入where git bash就可以找到它的路径

二,在pycharm中直接运行.sh文件

学习笔记:shell脚本基础操作_环境变量_04

(1)配置。点setting->tool->terminal->shell path。最后选中sh.exe。不要选bash.exe,因为这个程序最终还是要通过调用sh.exe来处理sh文件。

(2)sh文件的第一行一般都需要写“#!”后面接解释器的路径。写了之后,想要执行sh文件时直接写在终端输入“./xxx.sh”。如果sh文件中省略了解释器路径,就需要手动指定,写作“/bin/sh ./xxx.sh”

(3)如果选的是sh.exe,则新建一个sh文件时,不需要写“#!语句”了,可以直接执行。如果选中的是bash.exe则还需要写#!/bin/sh。

(4)在sh中每点一个运行,就会开启一个新的terminal窗口,所以一般在ternimal中按上箭头键,重复执行上一次的命令。在此处可直接切换shell解释器

三,sh脚本的语法

1,常用关键字

(1)打印echo。

echo "Hello Shell"

(2)exec:执行另一个 Shell 脚本

exec ./othershell.sh

(3)test:用于测试变量是否相等、 是否为空、文件类型等

2,变量

(1)定义变量

①普通变量:str1='hello'(定义字符串变量时,无空格情况下“”可以省略)

②只读变量:readonly AGE=21

(2)使用变量。${变量名}或者省略{}写作$变量名。

(3)显示变量长度(对于字符串变量):${#str1}

(4)定义的变量默认视为字符串,使用declare可以改变变量类型。!!改为整数是最常用的。定义sum=100+300+500,输出sum显示的是100+300+500,因为这个被视为字符串了。写成declare -i sum=100+300+500,输出sum才会是

学习笔记:shell脚本基础操作_字符串_05

900。

2,数组

(1)定义数组(各元素之间,空格隔开):array =(v0 v1 v2 v3)

(2)改变数组元素:array [2]=v22

(3)使用数组:echo ${array[2]}

(4)显示数组中所有元素,${array[*]}或${array[@]}

(5)获取数组长度:${#array[*或@]}

Ps,它也能用于求map中键值对个数

3,map类型,存储键值对,相当于python中的字典

(1)定义一个map。declare -A m=(["a"]="1" ["b"]="2")

(2)显示所有的key:${!m[@]}。显示所有value:${m[@]}

(3)输出某个key对应的value:${m["a"]}

(4)添加或改变元素:m["c"]="3"

4,环境变量

(1)对于sh脚本,它把环境变量视为一种默认定义好的变量,存在于环境中,脚本一启动就能直接用的。

(2)环境变量主要有:HOME:用户主目录、PATH:系统环境变量、TERM:当前终端、UID:当前用户 ID、PWD:当前工作目录,绝对路径

学习笔记:shell脚本基础操作_字符串_06

5,判断

学习笔记:shell脚本基础操作_字符串_07

学习笔记:shell脚本基础操作_环境变量_08

学习笔记:shell脚本基础操作_字符串_09

(1)if的三种写法

(2)判断表达式[command]

①文件判断

[-d FILE ] 如果 FILE 存在且是一个目录则返回为真。


学习笔记:shell脚本基础操作_bash_10

[-f FILE ] 如果 FILE 存在且是一个普通文件则返回为真。


学习笔记:shell脚本基础操作_bash_11

②字符串判断


学习笔记:shell脚本基础操作_字符串_12

③数值判断


学习笔记:shell脚本基础操作_字符串_13

④逻辑判断


学习笔记:shell脚本基础操作_环境变量_14

(3)case语句。画线的是可变内容,其余是固定写法。



学习笔记:shell脚本基础操作_环境变量_15

学习笔记:shell脚本基础操作_环境变量_16

学习笔记:shell脚本基础操作_环境变量_17

6,循环(3种写法)

Break、continue也能用。

8,seq [OPTION] FIRST 步长 LAST。

相当于range,按顺序显示一些数,从first按步长显示到last。[OPTION]是可选参数,其中-s 指定分隔符。-w 等宽输出,用0填充达到宽度一样,相当于zerofill

9,read命令,接收用户输入,相当于input\scanf

read -p "请输入用户数字:" num1

-p后第一个参数写,输入前需要显示的字。第二个参数接收用户输入

四,函数


学习笔记:shell脚本基础操作_字符串_18

学习笔记:shell脚本基础操作_bash_19

1,函数内部可以使用return,括号内可以定义形参。左图为定义、右图是调用。

五,调试shell

假设脚本为test.sh1。命令sh -n test.sh1会检查有无语法错误,无输出就是没错。

sh -x test.sh1是正式调试,它的输出中带+的是调试器输出,不带是程序输出(如echo)

六,执行一个py文件

1,从github中复制的,诸如...的语句,可以放到sh文件中。(\表示换行)

ps.\不可省略,--xx之间是以空格分割的,不是换行。所以不能省略\

python main_classification.py \

--task="$task" \

--config_json_file=../config/"$model"/"$task".json \

--weight_file=temp.pt \

--running_index="$running_index"

2,创建文件夹的命令,也是常用的

mkdir -p ../output/"$model"/"$running_index"