内容参考b站视频:BV17m411U7cC
———————
1.shell脚本反引号作用:将一行命令的结果赋值给一个变量要用反引号``或者$()括起来(推荐使用后者$(),更现代化更灵活),这样做是为了当成一个整体处理而不报错
2.linux中shell是用的bash,windows中用的是powershell,git的shell是git bash
3.cat命令可查看系统中shell所有的版本
cat /etc/shells
4.可以用 echo $+环境变量名 的方式查看系统中环境变量的值(内容)
eg:
echo $PATH #查看系统环境变量
echo $SHELL #查看系统当前默认使用SHELL版本的路径
echo $0 #当前正在执行的脚本的名称
5.切换shell版本和退出的方法:
输入shell版本的路径,回车
eg:
/bin/sh #切换到sh版本的shell
echo $0 #显示 /bin/sh ,即当前使用的是/bin/sh版本的shell
exit #退出(回到默认新版本的shell)
6.
(1)为了方便定时任务执行、自动执行等行为,便有了shell脚本
vi/vim demo.sh #编辑shell脚本(注:其实脚本后缀名的有无都行、后缀名的内容是什么都行,但是为了约定俗成让人好辨别这是shell脚本、所以一般加上.sh结尾)
shell脚本的内容是“#!+ shell版本的路径”,
如果想要换成其他版本修改 “shell版本路径”即可
eg:
#!/bin/bash --系统默认的shell是bash
#!/bin/zsh --换成zsh(zShell)
(2)简单shell脚本示例
#!/bin/bash
echo "hello shell" #打印双引号里的内容
date #打印当前时间
whoami #打印用户名
(3)执行shell脚本步骤
①vi hello.sh(内容如上面(2))
②chmod a+x hello.sh #执行脚本前要授予权限才能执行(a代表all即所有用户,x代表execute即执行)
③./hello.sh # ./文件名 的方式执行脚本
7.shell脚本中的变量默认是全局变量(如shell脚本中定义的函数中的变量),作用域为:定义处一直到脚本结束的位置
要想将变量变成局部变量,就在变量前面加上local关键字
eg:函数名(){
local num=$1 #加上local后,变量作用域仅在函数中有效了
函数内容/函数体
…
}
补:$1、$2、$3…分别表示传递给脚本的第一个、第二个、第三个参数
8.shell脚本中比较符是英文单词首字母缩写
It ( less than ):小于
le ( less than or equal to ):小于等于
gt ( greater than ):大于
ge ( greater than or equal to ):大于等于
eq ( equal to ):等于
ne ( not equal to ):不等于
#greater即great的比较级;更大的
9.脚本中if语句的写法要求严格,两个中括号两边都需要有空格,否则会因为语法错误而无法执行
eg:if [ $num -lt 2 ];then
10.vi编辑器的平替--两个更简单的使用方法
(1)VSCode的远程SSH连接扩展:
打开VSCode,扩展商店,搜索Remote SSH,安装,左侧出现SSH连接,在VSCod中SSH连接到远程服务器,还可以打开下方的终端、直接在远程服务器上输入命令
(2)使用nano编辑器(比vi更简单?)
略(记不了那么多了,有缘有需要再学)
11.shell脚本中的一些特殊变量
$# 传递给脚本或函数的位置参数的个数。
$? 上一命令的退出状态码。0通常表示没有错误,非0值表示有错误。
$* 传递给脚本或函数的位置参数,双引号包围时作为一个整体。
$@ 传递给脚本或函数的位置参数。
$$ 当前Shell进程的进程ID(PID)。
$! 最后一个后台命令的进程ID。
$0 当前脚本的名称。
$1-n 脚本或函数的位置参数。
12.
(1)定义普通变量
eg:name=Charlie
在shell脚本文件中引用脚本外的普通变量(即普通变量在脚本外的命令行中定义的,而想脚本执行时引用)是无法获取到它们的值的→所以见(2)
(2)export定义的环境变量
(export定义的环境变量可让脚本引用到)
eg:export name=Charlie
但是export定义的环境变量仅在当前shell会话中有效,exit退出后再重启访问的话变量就变空失效了→所以见(3)
(3)定义永久有效的环境变量
Shell会在启动时读取一些配置文件
最常见的就是家目录下的.bash_profile和.bashrc这两个文件
注意这两个文件是隐藏的(linux中所有以.开头的文件都是隐藏文件,直接使用ls命令是看不到的,用 ls -a 显示所有文件就能看见)
这两个文件都可以用来存储一些环境变量
但是.bash_profile文件是用户在登录时执行的且只执行一次
而.bashrc文件是每次新打开一个终端或者新建一个shell会话的时候都会执行一次的
不同shell的配置文件有差异
eg:zsh的配置文件是.zshrc文件
fish的配置文件是config.fish文件
但是原理都相同
通常.bash_profile里面会调用.bashrc
所以一般推荐把环境变量放到.bashrc文件中
这样可以保证每次新打开一个终端的时候,都可以获取到这些环境变量了
除了系统家目录下的这两个配置文件外,系统根目录下也会有一些系统级别的配置文件,比如根目录etc文件夹下的profile和bashrc文件等等,这些文件里存储的环境变量上是对所有用户都有效的
eg:把name和channel这两个变量放到.bashrc文件中,使用vi打开文件后,在文件里底部定义和导出一下这两个变量
vi .bashrc
…
fi
export name=Charlie
export channel=twitch
:wq #保存退出
提示:文件里添加了环境变量后,要重新加载或者退出shell会话重新登录才能生效
重新加载(两种方式):
①source .bashrc
②..bashrc
重启:
exit(然后重新登录,echo查看变量/执行脚本引用变量就发现没失效一直在)
让系统重新读取一下配置文件,这样环境变量才会生效
.bashrc文件中除了可以存储环境变量外,还可以定义一些别名来简化一些命令的使用,比如在默认的.bashrc文件中,就定义了ls命令的一些别名(如ll,la,l)(具体略,需要再学吧)