# 表示注释的意思
#! eg:'#!/usr/bin/env bash' 结合一起时候,后面一般接着路径,然后就是程序。表示脚本用什么程序执行,第一行指令在不明确声明什么程序去执行脚本的时候生效
if 语句的结束标签是fi
${} 获取变量的意思
$() 执行命令,获取结果
$0 获取执行脚本的第一个参数 eg: ssh **.sh param1 param2 其中$1表示param2
chmod -/+x 其中x表示exe可执行权限的意思,-/+表示添加或者删除权限 chmod 777 xxx
ln -s x y // 第一个字母不是1,而是小写的L,第二个参数-s表示software,命令表示软连接x到y,访问y就是访问x,不加-s就是硬链接
exit 1 大于0表示异常退出
$? -ne 0 // 其中 $?表示上一条命令退出的状态、 -ne表示not equal 不等于的意思
if里面的判断语句如果是取反的话,感叹号后面必须有空格
if [ ! true ]; then
# 这里写需要执行的东西,而且要注意的是结束的时候要考虑要不要使用
# exit 1
fi
使用$0时候注意事项
echo $0
# 上面的shell命令,如果执行脚本的时候是使用 ./test.sh,那么输出的结果就是./test.sh
使用mkdir -p的时候
# mkdir -p参数是能直接创建一个不存在的目录下的子目录
mkdir -p directory
获取当前路径
# 在shell中,会有以下语句用于获取当前的路径:
CURRENT_DIR="$(cd "$(dirname "$0")"; pwd)"
# 这里有一个技巧点,$0是执行当前脚本的路径 + 可执行路径,而dirname则是获取执行脚本的路径
# 以上命令 $(dirname "$0") 将返回该文件当前的上一层路径,通过cd到该路径,通过pwd获得当前路
# 径,并保存到CURRENT_DIR中;
添加环境变量
# 创建环境变量路径
NEW="${CURRENT_PWD}/x/y/:${PATH}"
# 添加路径至环境中
export PATH=${NEW}
# 在shell里面嵌入其他解释型语言
/usr/bin/bash <<-EOF
// 这里编写其他脚本的语句
EOF
如何创建并使用函数
function fn {
# 这里写需要执行的代码
}
if [ ! -d xxx ]; then
fn # 这里执行fn
fi
报错信息:bash: $'\r': command not found
解决方案:sed -i 's/\r//' 脚本名
tips:这是因为Windows系统的文件换行使用的是\r\n,而Unix系统是\n
shell命令
if
case
for while
until
break
continue
exit
shift
array
function
# 查询shell配置文件
rpm -rc bash
# su - root 区别 su root
/etc/profile // 系统 加中横线执行 不加不执行
/etc/bashrc // 系统 加中横线执行 不加也执行
~/.bash_profile // 用户 加中横线执行 不加不执行
~/.bashrc // 用户 加中横线执行 不加也执行
~/.bash_logout // 离开shell执行
~/.bash_history // 离开shell执行
# :set number ===显示行号==> 缩写:set nu
# shell可以使用命令行和脚本上面进行运行
# !num 执行哪条命令
# !string 找到最近一个string开头的命令并执行
# !$ 上一个命令的最后一个参数
# !! 上一个命令
# ^R
# alias 查看命名 unalias取消命名
# 定义命名vim .bashrc
# 执行shell可以用用 source *.sh
# 将X程序复制到y程序 cat x >> y
常用比较好用的指令
# ctrl类
+ u/k 向左向右删除
+ a/e 光标移到最左或者最右
+ y 撤回
了解Java、C 、Shell、Python、Perl
Java 编译型语言 字节码(java虚拟机jdk) tomcat
C 编译型语言 二进制机器码
shell 解释型语言 (/usr/bin/shell)
perl 解释型语言 (/usr/bin/perl)
expect 解释型语言 (/usr/bin/expect)
python 解释型语言 (/usr/bin/python)
编码 字节码(Python虚拟机)
程序是由什么组成的? : 逻辑+数据
执行命令的秘密
当使用bash bash.sh或者./shell.sh的时候
其实命令不是在当前的终端执行的,而是在sub shell里面执行的。对当前的shell不影响
使用 . bash.sh或者source bash.sh执行的话就是在当前的终端执行,立即生效
退出终端后删除子进程
退出终端删除子进程,只要在命令后面加上&即可。eg:sleep 500 &
ctrl+z保存现场,fg回到现场
输入多行到某个文件里面
输入一行到某个文件 echo 'dddd' > fileName
输入多行到某个文件 cat <<EOF > fileName
...
...
...
EOF
管道 | tee
ip addr | grep 'ens33' // 过滤
ip addr | tee fileName // 结合管道,将输出作为文件的入口,然后得出结果并生成文件
echo '444' > fileName // 将444输入到某个文件,但是没有结果
压缩文件命令
压缩:tar -zf dist.tgz dist
解压:tar -xf dist.tgz
unzip dist.zip
-z 压缩
-x 解压
-f 要压缩|解压的文件,只能放在最后,而且后面加文件
-v 显示所有过程
主机之间的拷贝命令SCP
scp 是安全拷贝协议(Secure Copy Protocol)的缩写,和众多 Linux/Unix 使用者所熟知的拷贝(cp)命令一样。scp 的使用方式类似于 cp 命令,cp 命令将一个文件或文件夹从本地操作系统的一个位置(源)拷贝到目标位置(目的),而 scp 用来将文件或文件夹从网络上的一个主机拷贝到另一个主机当中去。
而加上参数 -r 表示递归拷贝整个目录
`ssh -p22 userName@remoteIP`: -p22表示端口
`scp -r dist/ dockernode-1:~`scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。dockernode-1是节点,分号后面的波浪号是路径,~是/root/的缩写,-r: 递归复制整个目录。