.sh文件是什么?前端需要知道的shell基础

1,387 阅读3分钟

什么是shell?

shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括ls、cd、pwd等等。总结来说,Shell是一个命令解释器,它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进行控制。

windows系统下如何运行.sh脚本文件

这时,需要借助于开发过程中必不可少的git软件的bash来执行.sh文件以及shell命令

图片.png

如何执行shell命令

打开bash命令窗之后,简单的执行一下几个命令;这里的命令和linux下的shell命令一致

图片.png

如何执行.sh文件

以下三种方法都是可以的

sh index.sh
./index.sh
bash index.sh

当然,我们也可以把在package.json中写成脚本,通过npm run 的方式来执行.sh文件,前提是npm run 必须运行在bash中,运行在cmdpowerShell中是不行的,想要在终端执行.sh文件可以稍后参考我的另外一篇文章如何在VS Code中把默认终端设置为Bash

"scripts": {
    "serve": "webpack-dev-server --config build/webpack.dev.js --open",
    "build": "rimraf dist && webpack --config build/webpack.prod.js",
    "git": "sh git.sh"
  },

.sh文件基础语法

变量

my_name="jack"
my_name='jack';

ps: 变量名和等号之间不能有空格,变量后面不能有;

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的
  • 单引号字串中不能出现单引号(对单引号使用转义符后也不行

双引号:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

使用变量

对于已经定义过的变量,使用的适合在前面添加$

echo $my_name
echo ${my_name}

变量名外面的花括号是可选的,加不加都行,建议使用第二种形式

注释

# 喜羊羊美羊羊

以“#”开头的行就是注释,会被解释器忽略。

多行注释

sh里没有多行注释,只能每一行加一个#号。就像这样:

#--------------------------------------------
# Author:  jack 
#
# Notes: 10分钟入门Shell脚本编程
#
# Project home page:
#       https://github.com/hi-dhl/fast_guides
#--------------------------------------------

字符串

拼接字符串

my_name="jack";
my_age="20岁"
echo $my_name $my_age
echo $my_name$my_age

获取字符串长度

echo ${#my_name}

截取字符串

echo ${my_name:0:2}
# 从0开始截取两位

Shell 数组

定义数组

在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

#声明数组
array_name=(li wang xiang zhang) 
echo ${array_name[1]} 
echo ${array_name[@]}   #输出数组所有元素
echo ${#array_name[@]}  #取得元素个数
echo ${#array_name[0]}  #取得单个元素长度

还可以单独定义数组的各个分量:

ary[0]=name1
ary[1]=name2
ary[3]=name3

ps: 可以不使用连续的下标,而且下标的范围没有限制

Shell 流程控制

if语法

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

例子:

#!/usr/bin/env bash

a=1
b=2
if [ $a == $b ]
    then
        echo "a 等于 b"
 elif [ $a -gt $b ]
    then
        echo "a 大于 b"
 elif [ $a -lt $b ]
    then
        echo "a 小于 b"
 else
    echo "没有符合的条件"

 fi

输出:
#a 小于 b

for 循环

Shell的for循环,第一种写法
for index in 1 2 3 4 5; do
    echo "index="$index
done
Shell的for循环,第二种写法
for ((i=0; i<5; i++)); do
    echo "i="$i
done

while 语句

while循环用于不断执行一系列命令,也用于从输入文件中读取数据;命令通常为测试条件。

int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

常用操作

获取当前日期

foldername=$(date +%Y%m%d%H%M$S)
echo $foldername
#202211291104 
dateformat=$(date +%Y-%m-%d)
timeformat=$(date +%H:%M:%S)
echo $dateformat $timeformat
#2022-11-29 11:05:26

获取命令行的参数

echo "参数为$0"
echo "参数为$1"
echo "参数为$2"
echo "参数为$#"

示例:

$ sh git.sh bug已解决 提交吧

参数为git.sh
参数为bug已解决
参数为提交吧
参数为2

输出内容到指定文件中

1.输入内容到文件 >

echo "我是🐏" > help.text

2.追加内容到文件 >>

echo "我是🐺" >> help.text

3.换行输入到文件

echo "
 我是🐏
 我是🐺" >> help.text

explorer 打开指定文件

如果我们想每次在打包过后,自动打开文件所在目录,不妨试试在你的script脚本加上&& explorer .

explorer . 打开当前目录
explorer .. 打开上一层目录
explorer d:\ 打开D盘
explorer 'e:\test'

"build:test:h": "vue-cli-service build --mode hometest && explorer .",

如何通过vscode直接执行.sh文件

大家发现没,每次在项目中想执行.sh文件的话,还要退出去,打开文件夹目录执行git bash,是不是觉得很麻烦有没有,感兴趣的同学可以直接参考我的另外一篇文章如何在VS Code中把默认终端设置为Bash