交互式shell
非交互式shell
登录式shell
非登录式shell
1、 bash script-name 或 sh script-name (生成一个子shell执行)
2、 path/script-name 或 ./script-name (添加执行权限执行,默认根据脚本第一行指定的解释器执行,如果没有指定则以当前默认shell解释器执行)
3、 source script-name 或 . script-name (以当前默认shell解释器执行)
4、cat script-name |bash
产生子shell的情况
1、在父shell中执行一个shell脚本
bash ,执行环境不同,不能直接引用父shell变量,需export,定义的变量不能被父shell引用
2、在父shell中执行一条命令,在命令的末尾加上&
& ,执行环境相同,直接引用父shell变量,定义的变量不能被父shell引用
STR0='123';STR0='abc' &
echo $STR0
3、在父shell中执行一条命令,使用 () 中执行
(),执行环境相同,直接引用父shell变量,定义的变量不能被父shell引用
[root@web01 shell_class_03]# STR2='123' && (STR2='abc') && echo $STR2
123
4、在父shell中执行带管道的命令
管道,执行环境相同,直接引用父shell变量,定义的变量不能被父shell引用
[root@web01 shell_class_03]# STR1='123';echo 111 |STR1='ABC';echo $STR1
123
? 匹配任意一个字符
[] 匹配括号中任意一个字符a-z,0-9,A-Z,a-Z
() 在子 shell 中执行(cd /boot;ls) (umask 077; touch file1000)
{} 集合 touch file{1..9}
shell模式匹配
使用shopt 内置命令启用shell选项 (extglob) 则会识别几个扩展模式匹配运算符。
模式列表是由 | 分割
查看shell选项 extglob
启动shell选项 extglob
关闭shell选项 extglob
关于$
关于``
关于!
格式:
参数:
空命令
参数 : shell命令
信号
jumpserver.sh
expect-copy-sshkey.exp
cat dis-sshkey.sh
/etc/init.d
指定脚本解释器
单行注释 #
多行注释
主脚本
模块(子脚本)
1.定义变量变量名=变量值 ,不允许数字命名, 不能使用横岗命名
2.引用变量$变量名 或 ${变量名}
3.查看变量echo $变量名 set显示所有变量,包括自定义变量和环境变量
系统环境变量
1.定义环境变量 export export 变量 ,将自定义变量转换成环境变量
2.引用环境变量 $变量名 或 ${变量名}
3.查看环境变量 echo $变量名 env |grep Name
4.取消环境变量 unset 变量名
5.作用范围在当前shell和子shell有效
$1
$2
$3
预先定义变量
$0 脚本文件名
$* 所有的参数
$@ 所有的参数
$# 参数的个数
$$ 当前进程的 PID
$! 上一个后台进程的 PID
$? 上一个命令的返回值 0 表示成功
变量赋值方式
变量长度
从前往后删除变量内容
从后往前删除变量内容
索引及切片
变量内容替换
变量替代
自增/自减
ping.sh
[ ]
[[ ]]
(( )) 仅用于整数
https://www.gnu.org/software/bc/manual/html_mono/bc.html
顺序 选择 循环
算术运算
逻辑运算
Linux命令
流程图
IFS
把a.txt文件中的内容倒腾到b.txt文件中
cat a.txt
1
2
3
4
5
6
7
8
9
10
cat b.txt
10
9
8
7
6
5
4
3
2
while read
while读取文件三种方式
break n 表示跳出循环的层数
continue
continue n 退到第n层继续循环
select
$1
$2
$3
$#
$*
函数调用
系统函数库
action函数
普通数组(索引数组)
关联数组的下标是字符串
找出一个网络中最大的空闲ip地址段
抓阄