什么是shell?
shell是外壳的意思,就是操作系统的外壳。我们可以通过shell命令来操作和控制操作系统,比如Linux中的Shell命令就包括ls、cd、pwd等等。总结来说,Shell是一个命令解释器,它通过接受用户输入的Shell命令来启动、暂停、停止程序的运行或对计算机进行控制。
windows系统下如何运行.sh脚本文件
这时,需要借助于开发过程中必不可少的git软件的bash来执行.sh文件以及shell命令
如何执行shell命令
打开bash命令窗之后,简单的执行一下几个命令;这里的命令和linux下的shell命令一致
如何执行.sh文件
以下三种方法都是可以的
sh index.sh
./index.sh
bash index.sh
当然,我们也可以把在package.json中写成脚本,通过npm run 的方式来执行.sh文件,前提是npm run
必须运行在bash
中,运行在cmd
或powerShell
中是不行的,想要在终端执行.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;