shell脚本笔记(基础)

Shell脚本
什么是shell
shell是命令解释器,用于解释用户对操作系统的操作
ls->shell->kernel->硬盘->kernel->shell
cat /etc/shells

linux的启动过程
BIOS-MBR-BootLoader(grub)-kernel-systemd-系统初始化-shell
MBR:
dd if=/dev/sda of=mbr.bin bs=446 count=1
hexdump -C mbr.bin 硬盘的引导
grub:
cd /boot/grub2
grub2-editenv list 查看内核的信息,版本号
ls /sbin/grub2-mkconfig shellscript

怎样编写一个shell脚本  1.sh
UNIX的哲学:一条命令只做一件事
为了组合命令和多次执行,使用脚本文件来保存需要执行的命令
赋予该文件执行权限(chmod u+rx filename)
#!/bin/bash   定义解释器,Sha-Bang

shell脚本的执行方式
标准的 Shell 脚本要包含哪些元素
• Sha-Bang
• 命令
• “#”号开头的注释
• chmod u+rx filename 可执行权限
• 执行命令 
    • bash ./filename.sh 会让shell脚本产生新的子进程
    • ./filename.sh      需要有可执行权限,会让shell脚本产生新的子进程
    • source ./filename.sh 不会创建子进程
    • . filename.sh  不会创建子进程

内建命令和外部命令的区别
• 内建命令不需要创建子进程
• 内建命令对当前 Shell 生效

管道与重定向
管道与管道符
• 管道和信号一样,也是进程通信的方式之一
• 匿名管道(管道符)是 Shell 编程经常用到的通信工具
• 管道符是“|”,将前一个命令执行的结果传递给后面的命令
• ps  |  cat
• echo 123  |  p
cat | ps -f 同时会为第一条和第二条命令建立子进程,尽量不要使用内建命令
cd /proc/上面的进程号/fd

子进程与子shell
• 子进程是 Shell 程序,称作子 Shell
• 内部命令的结果不会传递给子 Shell

重定向符号
• 一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
• 输入重定向符号 “ <”   wc -l < /etc/passwd
• 输出重定向符号 “>” “>>” “2>” “&>”
组合形式  cat > /home/b.sh << EOF
 

shell脚本笔记(基础)_第1张图片

--2020.3.21

修改完环境变量之后,需要输入source /etc/profile 使其生效或者重启一个终端。放在etc下面的环境变量是所有用户通用的,放在家目录是当前用户可以使用的。

数组
定义数组  IPTS=(10.0.0.1 10.0.0.2 10.0.0.3)
显示数组的所有的元素  echo ${IPTS[@]}
显示数组元素个数 echo ${#IPTS[@]}
显示数组的第一个元素  echo ${IPTS[0]}   

shell脚本笔记(基础)_第2张图片


特殊字符
特殊字符:一个字符不仅有字面意义,还有原意(meta-meaning)
# 注释
; 分号
\ 转义字符
单个字符前的转义符号
\n\r\t 单个字母的转义
\$ \" \\单个非字母的转义

shell脚本笔记(基础)_第3张图片
"和"引号
常用的引用符号
"双引号
'单引号
`反引号


运算符
赋值运算符
= 赋值运算符,用于算数赋值和字符串赋值
算数运算符  + - * / ** %
使用expr进行运算  expr 4 + 5  只能支持整数,不支持浮点数
数字常量的使用方法
let "变量名=变量值"
变量值使用0开头为八进制
变量值使用0x开头为十六进制
双圆括号是let命令的简化
((a=10))
((a++))
echo $((10+20))

shell脚本笔记(基础)_第4张图片
使用unset取消为变量的赋值
=除了作为赋值运算符还可以作为测试操作符

特殊字符大全
引用
"不完全引用
'完全引用
`执行命令

括号
() (()) $()圆括号
单独使用圆括号会产生一个子shell(xyz=123)
数组初始化 IPS=(ip1 ip2 ip3)
[] [[]]方括号
单独使用方括号是测试(test)或者数组元素功能
两个方括号表示测试表达式
<>尖括号 重定向符号
{} 花括号
输出范围 echo{0..9}
文件复制 cp /etc/passwd{,.bak}

shell脚本笔记(基础)_第5张图片
运算和逻辑符号
+ - * / % 算数运算符
><= 比较运算符
&& || ! 逻辑运算符

shell脚本笔记(基础)_第6张图片
转义符号\
\n 普通字符转移之后有不同的功能
\'特殊字符转义之后,当做普通字符来使用

其它符号
# 注释符
;命令分隔符
case语句的分隔符要转义;;
:空指令
. 和source命令相同
~家目录
,分隔目录
*通配符
? 条件测试或通配符
$取值符号
|管道符
&后台运行
_ 空格

shell脚本笔记(基础)_第7张图片

 

你可能感兴趣的:(Linux)