初始shell
shell脚本大致分为四种类型
记叙型:像写作文一样,一件事一件事的写
判断型:会根据内容选项进行选择
循环型:
混合型:集结了上述的三种类型
面向对象:开发在开发的时候将任务当成一个整体
面向过程:开发的时候需要一步一步执行
shell是一个命令解释器,在操作系统的最外层,负责将人类使用的高级语言翻译成二进制,也可以将二进制翻译成高级语言
将人类写的命令集合,用bash(shell)去翻译给硬件执行
shell脚本应用场景
重复性操作
批量事务处理
定时任务执行
shell脚本的构成
1 #!/bin/bash 2 #声明解释器 代表我接下来,使用什么解释器来解释,接下来的命令 3 # “#” 表示注释信息 4 5 cd /opt 6 mkdir test 7 #可执行的命令 8 9 #以.sh 结尾的文件 命令会高亮
执行脚本的三种方式
直接调用shell 解释器 加上脚本的名字 bash 脚本名不需要加上权限
路径/脚本 路径:绝对/相对 但是这个需要权限
source(.)加脚本名 (不建议使用)不需要权限
会直接修改当前bash的环境
命令为什么可以补全?
因为 bash在补全的时候,bash会自动去 “echo $PATH”下查找,找到了会自动补全
如果想让脚本全局运行(补全),将脚本放入$PATH路径下
脚本错误
1、命令错误 不会影响接下来的命令执行 但本条命令不执行
bash -x 脚本 bash -x会自运行一遍检查错误
2、语法错误 直接影响脚本,无法正常运行
bash -n 脚本 检查语法错误
3、逻辑错误 不会影响命令的执行,只是得到的结果不同
set -e 脚本错误会时会自动停止
set -u 变量不存在不让执行
重定向操作
重定向:改变电脑数据的输出方向 默认输出的方向是屏幕
电脑给你的回复一定会在屏幕上 我们称为:标准输出
如果电脑没有正确回复 我们称为:错误输出
我们通过键盘鼠标扫描仪话筒等设备输入给电脑的指令 我们称为:标准输入
类型 | 操作符 | 解释 |
重定向输入 | < | 从指定的文件读取数据,而不是从键盘输入 |
重定向输出 | > | 将输出结果保存到指定的文件(覆盖原有内容) |
>> | 将输出结果追加到指定的文件尾部 | |
标准错误输出 | 2> | 将错误信息保存到指定的文件(覆盖原有内容) |
2>> | 将错误信息追加到指定的文件中 | |
混合输出 | &> | 将标准输出、错误输出的内容保存到同一个文件中 |
shell的变量
作用:用来存放系统和用户需要使用的特定参数
变量名:使用固定的名称,由系统预设或用户定义
变量值:能够根据用户设置、系统环境的变化而变化
变量:值可以变化的
常量:值不可以变化
变量的类型:
自定义变量:由用户自定义、修改和使用
特殊变量:环境变量(env 可以看到所有的环境变量)
只读变量(只可以读,不可以该)
位置变量($1 $2....$n)
预定义变量($? $$ $* $@)
shell 不分 数据类型 将所有的数类型都看作字符串
变量名=变量值 (两边都没有空格)
调用变量:echo $变量名
输出变量名:unset 变量名
重新定义变量:变量名=变量值
追加变量值:变量名+=变量值
变量名命名的要求:
- 区分大小写
- 只能使用数字、字母及下划线,且不能以数字开头
- 大驼峰:StudentFirstName
- 小驼峰:studentFirstName
- 下划线:student_name
特殊符号:
${ } 定义了变量名的范围
$[ ]一定不会出错
" " 变量在双引号中可以识别 (弱引用)
' ' 变量在单引号中不被识别 (强引用)
`` 反撇号 代表引用命令执行的结果 效果等于 $()
整数的运算
expr只能进行整数的运算
格式:expr 变量1 运算符 变量2 [运算符 变量3]
运算符:
加法:+
减法:-
乘法:\*
除法:/
取余:%
实例:
#配置一个简单的计算机,这个计算机只能计算整数
#运行这个脚本,根据提示输入(不能计算小数)
#计算小数会报错
#将脚本中的运算符改成%可以计算取余
补充:抽数器
#会从1到30中随机抽取一个数字
预定义变量:
系统帮你定义好了,拿来就可以使用
$?:代表上一次命令执行结果是否正确 0 代表正确 非0 代表非正确
$0:代表脚本的文件名字 (只表示当前)
$$:表示当前bash的pid
$#:代表位置参数的总个数
$*:代表返回所有参数 (将所有的参数当成一个整体返回)
$@:代表返回所有参数 (所有的参数都是一个独立的个体)
#编辑一个js.sh的脚本
#执行js.sh 范围在{a..z}
试着写脚本:
脚本一:一键搭建yum仓库
1 #!/bin/bash 2 mount /dev/sr0 /mnt 3 cd /etc/yum.repos.d 4 mkdir bak 5 mv *.repo bak 6 7 echo " 8 [local] 9 name=loacl 10 baseurl=file:///mnt 11 gpgcheck=0 12 " > local.repo 13 yum clean all &>/dev/null 14 yum makecache &>/dev/null 15 16 yum install tree -y &>/dev/null
17 set -e
#写脚本时一定要注意格式,语法,千万不能出错
#运行后会自动安装tree服务
脚本二:快速查看电脑配置(简单版)
1 #!/bin/bash 2 ip=`ifconfig ens33|grep netmask|tr -s " "|cut -d " " -f3` 3 cpu=`lscpu |grep 型号名称|cut -d":" -f2|tr -s " "` 4 mem=`free -h|grep Mem|tr -s " "|cut -d " " -f2` 5 disk=`lsblk|grep disk|tr -s " "|cut -d " " -f4` 6 7 8 9 echo "-----------------systeminfo--------------------" 10 echo "你的ip地址是:${ip}" 11 echo "你的主机名是:$(hostname)" 12 echo "你的系统版本是:$(cat /etc/redhat-release)" 13 echo "你的CPU型号是:$cpu " 14 echo "你的内存大小是:$mem " 15 echo "你的磁盘大小是:$disk "
脚本三:快速给硬盘分区
为服务器添加硬盘
1 #!/bin/bash 2 read -p "请输入你要分区的设备:" disk 3 4 read -p "请输入你要分区的大小:" num 5 6 echo -e "n\n\n\n\n${num}\nw\n " | fdisk ${disk}
#准备为sdc盘进行分区
#执行过后可以使用lsblk查看是否成功
标签:脚本,shell,变量,echo,初始,变量名,bash From: https://www.cnblogs.com/chenjw0608/p/17844659.html