shell编程初识 第一天

目录

初识shell

shell定义

shell能做什么

shel的分类和更改:

shell的特性

shell命令解释器

gnu/bash shell特点

一、命令和文件自动补齐

二、命历史记忆功能   

三、快捷键

四、前后台作业控制

五、输入输出重定向

六、管道 |tee

七、命令排序

八、shell通配符

脚本编写


初识shell

shell是一门语言,语言分为:

计算机语言:c语言、c++、Java、php、python、go、shell

编译型语言:c++、java

解释性语言:php、python、bash

编译型语言:编译型语言首先将源代码编译生成机器语言,再由机器运行机器码(二进制)。像c/c++等都是编译型语言。

解释型语言:源代码不是直接翻译成机器语言,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。比如:python/javascript/shell等都是解释型语言

shell定义

shell也是一种程序设计语言,他有变量,关键字,各种控制语句,有自己的语法结构,利用shell程序设计语言可以编写功能很强、代码简短的程序。

shell是外壳的意思,就是系统的外壳,我们可以通过shell的命令啦控制和操作操作系统,比如linux中的shell命令就包括ls、cd、pwd、等,总结来说shell就是一个命令解释器,他通过接受用户输入的shell命令来启动、停止程序的运行或者对计算机进行控制。

shell能做什么

1、自动化批量系统初始化程序(update、软件安装、时区设置、安全策略)

2、自动化批量软件部署程序(lamp、lnmp、tomcat、lvs,nginx)

3、应用管理程序(kvm、集群管理扩容,mysql、dellr720批量raid)

4、日志分析处理程序(PV、uv、200、!200、top100、grep/awk)

5、自动化备份恢复程序(mysql完全备份/增量/差异+crond)

6、自动化管理程序(批量远程修改密码。软件升级、配置更新)

7、自动化信息采集及监控程序(收集系统/应用状态信息、CPU、mem、disk、net、tcp status、apache、mysql)

8、配合zabbix信息采集(收集系统/应用状态信息,cpu、mem、disk、net、tcpstatus、apache、mysql)

9、自动化扩容(增加云主机-->业务上线)

10、shell可以做任何事,一切基于业务需求。

shel的分类和更改:

[root@nfy ~]# cat /etc/shells   查看系统支持哪些shell
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
[root@nfy ~]# chsh -l    查看所有的shell
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

shell的特性

shell命令解释器

linux支持的shell

#cat /etc/shells    #chsh -l

gnu/bash shell特点

一、命令和文件自动补齐

二、命历史记忆功能   

上下键调动历史命令    、!number(命令序号)、!$

三、快捷键

    Ctrl+a 切换到命令行开始(跟home一样,但是home在某些unix环境下无法使用)
    Ctrl+e 切换到命令行末尾
    Ctrl+u 清除剪切光标之前的内容
    Ctrl+k 清除剪切光标之后的内容
    ctrl+y    粘贴刚才锁删除的字符
    ctrl+左右键  快速移动光标
    Ctrl+r    在历史命令中查找,输入关键字调出之前的命令

四、前后台作业控制

&:后台运行

ctrl+c:终止

ctrl+z:暂停

bg %num:将一个在后台暂停的命令继续执行

fg %num:将后台中的命令调至前台执行

kill %num:杀死后台的某个人进程

五、输入输出重定向

文件描述符与输出重定向:
在 shell程序中,最常使用的FD (file descriptor) 大概有三个, 分别是: 
stdin(0): keyboard 键盘输入,并返回在前端
stdout(1): monitor 正确返回值 输出到前端
stderr(2): monitor 错误返回值 输出到前端
>a.txt     覆盖重定向到a.txt
1>a.txt    正确的覆盖重定向到a.txt
2>a.txt    错误的输出到a.txt
&>a.txt    混合输出,正确的错误的都输出到a.txt
1>&2       混合输出
2>&1       混合输出

一般来说, "1>" 通常可以省略成 ">".
1>&2 正确返回值传递给2输出通道 &2表示2输出通道,之前如果有定义标准错误重定向到某log文件,那么标准输出也重定向到这个log文件,如果此处错写成 1>2, 就表示把1输出重定向到文件2中.
2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道.

六、管道 |tee

[root@nfy ~]# ip addr|grep 'inet'|tee c.txt|cat -n
     1	    inet 127.0.0.1/8 scope host lo
     2	    inet6 ::1/128 scope host 
     3	    inet 192.168.242.137/24 brd 192.168.242.255 scope global dynamic ens33
     4	    inet6 fe80::a5e8:6219:e182:127a/64 scope link 
tee命令用于将数据重定向到文件(有文件重定向到文件,没有则创建),另一方面还可以提供一份重定向数据的副本作为后续命令的stdin。简单的说就是把数据重定向到给定文件和屏幕上。

        ip addr |grep 'inet ' |tee test |grep eth0	覆盖
		ip addr |grep 'inet ' |tee -a test |grep eth0	-a 追加

七、命令排序

&&    ||		;   具备逻辑判断
;   无论前面是否执行成功,分号后的命令都会继续执行	
&&:前面执行成功,后面的才继续执行
||:前面命令不成功,后面的命令也会继续

注意:
command &							后台执行
command &>/dev/null			混合重定向(标准输出1,错误输出2)
command1 && command2		命令排序,逻辑判断

八、shell通配符

元字符,表示的不是本意

字符含义实例
*匹配任意多个字符a*b a与b之间可以有任意长度的任意字符,也可以一个都没有,如aabcb,axyzb
匹配任意一个字符 a?b a与b之间必须也只能有一个字符, 可以是任意字符
[]匹配括号中任意一个字符a[xyz]b a与b之间必须也只能有一个字符, 但只能是 x 或 y 或 z
()在子shell中执行(cd /boot;ls)   (umask 077; touch file1000)
{}集合touch file{1..9}
\转义符,让元字符回归本意# echo *
# echo \*

脚本编写

1、创建bash脚本:以.sh结尾的文件,.py结尾的文件是python的脚本

# vim xxx.sh
  #!/bin/bash   或者#!/usr/bin/env/bash
指定命令解释器:第一行的专门解释,他指明了当我们没有指定解释器的时候默认的解释器。直接使用./a.sh来执行这个脚本的时候,如果没有shebang,就会默认使用$shell指定的解释器,否则就会使用shebang指定的解释器,第一行可以写也可以不写,如果写的话一定要写正确。
注释:以#开头的都是注释,都不生效,注释的意义不仅在于用途,而在告诉我们注意事项,就像一个readme
 

2、修改权限(改不改路径都可以执行)

3、脚本的执行

#./scripts
#/shelldoc/scripts
#. ./scripts         使用当前登录shell执行
#source ./scripts    使用当前登录shell执行  比如cd /tmp会改变当前shell环境,但是其他的方式不会
#bash scripts        常用

4、脚本的调试

•sh –x script
	这将执行该脚本并显示所有变量的值
•sh –n script
	不执行脚本只是检查语法模式,将返回所有错误语法
•sh –v script
	执行脚本前把脚本内容显示在屏幕上

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值