shell脚本概念与命令

一、shell的作用

        Shell 是一个特殊的应用程序,它介于操作系统内核与用户之间,充当 了一个“命令解释器”的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执 行的操作传递给内核执行,并输出执行结果。 常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符 等方面会存在一些区别。通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类。

1.1 linux中常见的shell

bash:基于gun的框架下发展的shell

csh:类似c语言的shell

tcsh:整合了csh提供了更多功能

sh:已经被bash替换

nologin:让用户无法登录

bash (/bin/bash)是目前大多数Linux 版本采用的默认shell

1.2 shell脚本用途

将简单的命令组合完成复杂的工作,自动化执行命令,提高工作效率

减少手工命令的重复输入,一定程度上避免人为错误

将软件或应用的安装及配置实现标准化

用于实现日常性的,重复性的运维工作,如:文件打包压缩备份,监控系统运行状态并实现告警等

 1.3 shell的脚本概念

将命令按顺序一一列出,最后自动执行

执行需要权限,也可以直接使用路径

脚本其实不复杂,通用脚本环境改变后依然可以使用的脚本

构成

  1. 脚本申明(解释器):第一行开头“#!/bin/bash”,表示此行以下的代码语句是通过/bin/bash程序来解释执行。#!/bin/bash为默认的解释器还有其他类型的解释器,#!/bin/python #!/bin/expect

  2. 注释信息:以#开头的语句表示为注释信息 # 注 释

  3. 可执行语句:比如echo命令用于输出“ ”之间的字符串

1.4 shell脚本执行逻辑及执行方式

脚本执行逻辑

  1. 顺序执行:程序按从上到下顺序执行

  2. 选择执行:程序执行过程中,根据条件的不同,进行选择不同分支继续执行

  3. 循环执行:程序执行过程中需要重复执行多次某段语句

执行方式

  1. 指定路径去执行文件(需要有执行权限)

[root@localhost ~]# chmod +x /root/host.sh    加权限
指定相对路径./host.sh
指定绝对路径/root/host.sh

    2. 直接使用解释器  (不需要权限)

    3. source 和 . 执行  (不需要权限)  不推荐使用

1.5 脚本错误调试

命令错误,命令出错不会影响接下来的命令继续,用bash -n 无法检查出来 ,可以使用 bash -x 进行观察

语法错误,会影响接下来的命令继续可以用bash -n 检查错误,提示的出错行数不一定是准确的

逻辑错误,只能自己去筛查

检查脚本错误

  • 检查语法错误:bash -n 脚本名称 (不在当前目录下加绝对路径)    
  • 检查逻辑错误:bash -x 脚本名称 (不在当前目录下加绝对路径)    

1.6   set -e   一旦出错立即停止     set -u 当变量不存在立即停止

在  脚本的前面输入  set -e   一旦出错立即停止

set  -e
cd  /op
rm -rf ./*

在文档前面添加,可能会拖慢执行过程

二、重定向与管道符

2.1 重定向

类型设备文件文件描述编号默认设备
标准输入/dev/stdin0键盘
标准输出/dev/stdout1显示器
标准错误输出/dev/stderr2显示器

重定向的意思就是 ,不输出到默认设备上,输出到你指定的位置

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

[root@localhost ~]#ls >/dev/pts/1
#打开两个终端,ls命令显示到终端1上 标准重定向省略了1>

[root@localhost ~]#xxx >/dev/pts/1
##错误重定向
bash: xxx: 未找到命令...
[root@localhost ~]#xxx 2>/dev/pts/1
##会在另一边显示

[root@localhost ~]#rm xxx.txt >/dev/pts/1
#提示信息也是错误
rm: 无法删除"xxx.txt": 没有那个文件或目录
[root@localhost ~]#rm xxx.txt 2>/dev/pts/1

[root@localhost ~]#ls /data /error >all.log 2>&1
#既有错误也有正确 &符号表示分隔符

2.2 多行重定向

[root@localhost data]#wc -l <<EOF
> 123
> 123
> EOF
2

将内容写入   文件
[root@localhost data]#cat >1.txt <<EOF
> 123
> 345
> 567
> EOF

修改密码
[root@localhost data]#passwd zhangsan <<EOF
> 123123
> 123123
> EOF
更改用户 zhangsan 的密码 。
新的 密码:无效的密码: 密码少于 8 个字符
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。

三、变量

3.1 常见 Shell 变量的类型包括

自定义变量:由用户自己定义,修改和使用
预定义变量:Bash中内置的一类变量    shell           不能修改    规定好的变量 放在那里让你使用


环境变量:由系统维护,用于设置工作环境      当前目录  当前主机名啊   $PATH     
只读变量:只可以读取不可以更改              只能不能修改    常量   
位置变量:通过命令行给脚本传递参数

3.2 特殊符号

shell变量特殊符号双引号弱引用  可以识别变量
单引号强引用  不能识别变量
{   }定义变量名的范围
    ` 反撇调用命令的执行结果与$(  )功能限制

3.3 变量格式 

定义变量:变量名=变量值      name=wang

调用变量:echo  $变量名        echo $name

取消变量:unset                       unset wang

追加变量:export  变量名  

3.4 变量追加值 

格式:变量名+=追加值

3.5 变量作用范围

格式1:export  变量名
格式2:export  变量名=变量值

3.6  整数的运算  expr

格式: expr 变量1 运算符 变量2 [运算符 变量3]

需要非整数运算使用 bc

let var=算术表达式
let sum=1+2
sum=1+2  

sum=$[ ]  计算

echo $sum

3.7 随机数生成器变量

$RANDOM  取值范围:0-32767

echo  $(expr   $RANDOM   %   33  + 1)       1-33

   echo  $(expr   $RANDOM   %   33 )   0-32
#注意运算符附近都要有空格

3.8 计算机基本参数脚本

怎么将脚本拿到Windows:  sz   文件名.sh

3.9 环境变量

1️⃣ 由系统提前创建,用来设置用户的工作环境
2️⃣ 可以使用env查看环境变量
3️⃣ 需要记住的常用环境变量

配置文件位置在

/etc/profile如果修改此文件会作用于所有用户

~/.bash_profile  用户独立的配置文件,修改这个文件只作用于当前用户

3.10 位置变量

位置变量也称为位置参数,使用$1、$2、$3、…、$9 表示

[root@test1 ~]# vim 1.sh      
#!/bin/bash
echo "$1"            位置1
echo "$2"            位置2
echo "${10}"         位置10
echo "$10"           位置1和0
echo "$*"            将所有项当成一个值
echo "$@"            所有项
echo "$0"            脚本自身
echo "$#"            后面参数的个数
[root@test1 ~]# ./1.sh {1..10}

2
10
10
1 2 3 4 5 6 7 8 9 10


$0 表示当前的脚本名称

3.10 预定义变量   

bash   帮你定义好了  拿来用就可以

预定义变量:bash $*:表示所有位置参数的内容看成一个整体返回      返回所有         
$@:表示所有位置参数的内容分割成n份,每份作为一个独立的个体返回   返回所有 
$?:表示前一条命令执行后的返回状态,返回值为 0 表示执行正确,返回任何非 0值均表示执行出现异常
$#:表示命令行中位置参数的总个数
$0:表示当前执行的脚本或程序的名称     当前脚本的名字
$$:当前bash的进程id   
$!:  后台任务最后一个id

$* 和$@ 的区别 

四、条件语句

4.1 () {}

(CMD1;CMD2;...)和 {    CMD1;CMD2;...; } 都可以将多个命令组合在一起,批量执行

()会开启子shell

  { } 不会开启子shell

[root@localhost data]#name=lc
[root@localhost data]#( name=mcl;echo $name );echo $name
mcl
lc
[root@localhost data]#name=lc
[root@localhost data]#{ name=mcl;echo $name; };echo $name
mcl
mcl

4.2 test 测试

test 测试文件的表达式 是否成立

格式1:test  条件表达式
格式2:[  条件表达式  ]       用得比较多
注意[  ]空格,否则会失败
测试 是否成功使用 $?  返回值
[ 操作符 文件或目录 ]
help test

test 测试                                           格式1:test  条件表达式—d测试是否为目录
—e测试目录或文件是否存在
—a测试目录或文件是否存在
—f测试是否为文件
—r测试当前用户是否有权限读取
—w测试当前用户是否有权限写入
—x测试当前用户是否有权限执行
—l

测试是否为软连接文件

! :是代表取反的意思

4.3 数值比较整数

比较整数数值—eq第一个数等于(Equal)第二个数
—ne不等于
—gt大于
—lt小于
—le小于或等于
—ge大于或等于

4.4 逻辑运算(短路运算)

常见条件

  • -a或&&:逻辑与,“而且”的意思全真才为真

  • -o或||:逻辑或,“或者”的意思一真即为真

  • ! :是代表取反

逻辑与
第一一个命令为真,才需要执行第二个命令
全真才为真,一假即为假

第一个命令假了,一定假了    

逻辑或
一真即为真,全假才为假
第一个命令为真,不需要执行第二个命令了,  一定为真了
第一个命令为假,需要执行第二个命令来看 整个式子的结果

4.5 bash 的配置文件

登录bash就会对这四个文件进行个性化配置

更改只对当前用户生效

 ~/.bashrc                  大部分是别名

~/.bash profile

更改对所有用户生效

/etc/profile                环境变量

/etc/profile.d/*.sh         

五、if语句的结构  双分支 及练习

if  命令 ;then 

命令

fi

单分支

1️⃣ 写法

if 判断的命令 ;then

则执行命令 

fi

写一个条件,如果成功则执行命令,否则直接结束

2️⃣

if 判断条件;then;执行命令;fi

3️⃣

if  判断条件

then

执行命令

fi

双分支

if    判断条件

then

执行命令1

else

执行命令2

fi

 

安装httpd 服务  先判断操作系统  如果是  CentOS用yum装  如果是 ubuntu 用apt装

可以添加一个检测有没有装,这里是默认没有装

实验🧪

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值