目录
shell:人类写的命令集合,用bash(shell软件)翻译给硬件执行。
#!/bin/bash
表示接下来的命令需要使用什么解释器来解释。
以#开头的语句表示为注释信息。
直接调用shell解释器,不需要加上权限

路径:绝对路径/相对路径,需要执行权限

不需要加上权限,但是不建议使用

注意:source会直接修改当前bash环境参数


改为source执行脚本时

补充:如果想要脚本全局运行(补齐),需要将脚本软连接到$PASH路径下。
且脚本需要有执行权限。

①. 顺序执行:程序按从上到下顺序执行
②. 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行
③. 循环执行:程序执行过程中需要重复执行多次某段语句
不会影响接下来的命令执行,但本条命令不会执行

直接影响脚本无法正常运行

可以发现命令错误和语法错误

可以检查语法错误

一旦脚本运行出错就会停止运行

变量不存在就停止
将第一个命令的执行结果作为后一个命令的处理对象
重定向:改变电脑数据的输出方向
| 类型 | 设备文件 | 文件描述编号 | 默认设备 |
|---|---|---|---|
| 标准输入 | /dev/stdin | 0 | 键盘 |
| 标准输出 | /dev/stdout | 1 | 显示器 |
| 标准错误输出 | /dev/stderr | 2 | 显示器 |

默认电脑数据的输出方向是屏幕,当发了一条指令给电脑,电脑会回复结果给你,结果一定显示在屏幕上。

如果电脑没有正确回复,称为错误输出。

通过键盘、鼠标等设备输入给电脑的指令。
| 类型 | 操作符 | 用途 |
|---|---|---|
| 重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
| 重定向输出 | 1> | 将输出结果保存到指定的文件(覆盖原有内容) |
| >> | 将输出结果追加到指定的文件尾部 | |
| 标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
| 2>> | 标准错误输出结果追加到指定的文件尾部 | |
| 混合输出 | &>无论对错都可以重定向 | 将标准输出、标准错误的内容保存到同一个文件中 |

> :覆盖

>>:追加

变量名=变量值

echo $变量名

变量名=变量值

变量名+=变量值

unset 变量名

export定义全局变量,可以让变量继承

由用户自己定义,修改和使用。

Bash中内置的一类变量,不能修改。
如:$? $$ $* $@ 都是shell程序中自带的

表示前一条命令执行后的返回状态。
返回值为 0 表示执行正确,返回任何非 0 值均表示执行出现异常

表示命令行中位置参数的总个数。

表示当前执行的脚本或程序的名称,当前脚本的名字。

当前进程id。

后台任务最后一个id。
代表返回所有参数,所有参数被当成一个整体返回。

代表返回所有参数,每个参数都是一个独立的个体返回。

由系统维护,用于设置工作环境。
env可以看到所有环境中的变量


配置文件位置:
/etc/profile如果修改此文件会作用于所有用户
~/.bash_profile 用户独立的配置文件,修改这个文件只作用于当前用户
可以用来长期变更或设置环境变量
只可以读不可以改,只能重启。

通过命令行给脚本传递参数。
如:$1 $2 ...... $n

${ } :定义了变量名的范围
" " :变量在双引号中可以识别,弱引用
' ' :变量在双引号中不可以识别,强引用
` ` :反撇号,代表引用命令执行的结果,效果等于 $()
- name='value'
- 变量名=变量值
- 直接字串:name='root'
- 变量引用:name="$USER"
- 命令引用:name=`COMMAND` 或者 name=$(COMMAND)
- 注意:变量赋值是临时生效,当退出终端后,变量会自动删除,无法持久保存,脚本中的变量会随着脚本结束,也会自动删除
-
- 变量引用:
- $name
- ${name}
-
- 弱引用和强引用
- "$name " 弱引用,其中的变量引用会被替换为变量值
- '$name ' 强引用,其中的变量引用不会被替换为变量值,而保持原字符串
-
- [root@localhost opt]# producet=kgc
- [root@localhost opt]# echo $producet
- kgc
- [root@localhost opt]# version=6.0
- [root@localhost opt]# echo $producet$version
- kgc6.0
- [root@localhost opt]# echo "$producet$version"
- kgc6.0
- [root@localhost opt]# echo '$producet$version'
- $producet$version
- [root@localhost opt]# echo $producet6.0
- .0
- [root@localhost opt]# echo ${producet}6.0
- kgc6.0
- [root@localhost opt]# echo ${producet}$version
- kgc6.0
-
-
-
- [root@localhost ~]#echo ls
- ls
- [root@localhost ~]#echo $(ls)
- abc.txt anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 视频 图片 文档 下载 音乐 桌面
- [root@localhost ~]#echo `ls`
- abc.txt anaconda-ks.cfg initial-setup-ks.cfg 公共 模板 视频 图片 文档 下载 音乐 桌面
从键盘输入的内容变成变量
- 方法1
- [root@localhost opt]# read -p "现在的时间是" time
- 现在的时间是9点
- [root@localhost opt]# echo $time
- 9点
-
- 方法2
- [root@localhost opt]# vim 1.sh
- #!/bin/bash
- echo -n "请输入你的信息"
- read info
- echo $info
-
- [root@localhost opt]# bash 1.sh
- 请输入你的信息ky15
- ky15
- [root@192 ~]# read -p "是否覆盖当前文件 (yes/no)" ACK
- 是否覆盖当前文件 (yes/no)yes
- [root@192 ~]# [ $ACK = "yes" ] && echo "覆盖"
- 覆盖
- [root@192 ~]# read -p "是否覆盖当前文件 (yes/no)" ACK
- 是否覆盖当前文件 (yes/no)no
- [root@192 ~]# [ $ACK = "no" ] && echo "不覆盖"
- 不覆盖
运算符:




i++ 是先赋值再加
++i 是加后再赋值

$RANDOM 取值范围:0-32767
- [root@localhost ~]# echo $[RANDOM%34+1]
-
- #RANDOM%34 取余
- #范围为0~33
- #结果+1,表示1~34取随机数
- #!/bin/bash
- RED="\E[1;31m"
- GREEN="\E[1;32m"
- END="\E[0m"
- echo -e "$GREEN----------------------Host systeminfo--------------------$END"
- echo -e "HOSTNAME: $RED`hostname`$END"
- echo -e "IPADDR: $RED` ifconfig ens33|grep -Eo '([0-9]{1,3}\.){3}[0-9]
- {1,3}' |head -n1`$END"
- echo -e "OSVERSION: $RED`cat /etc/redhat-release`$END"
- echo -e "KERNEL: $RED`uname -r`$END"
- echo -e "CPU: $RED`lscpu|grep 'Model name'|tr -s ' '|cut -d : -f2`$END"
- echo -e "MEMORY: $RED`free -h|grep Mem|tr -s ' ' : |cut -d : -f2`$END"
- echo -e "DISK: $RED`lsblk |grep '^sd' |tr -s ' ' |cut -d " " -f4`$END"
- echo -e "$GREEN---------------------------------------------------------$END"