shell脚本语言---@颜麓

"本文介绍了Shell的基本概念,作为Linux操作系统的用户接口,它允许用户通过命令行执行任务。Shell脚本是一种解释执行的编程语言,常用于自动化系统管理任务,如批量初始化、软件部署、日志分析等。文章详细讲解了如何查看当前使用的shell、shell脚本的编写流程、执行方式以及输入输出命令。此外,还讨论了shell程序的执行过程,包括()和{}
摘要由CSDN通过智能技术生成

一、shell简介

1、shell是什么
shell是命令解释器(command interpreter),是linux操作系统的用户接口
程序从用户接口得到输入信息,shell将用户程序及其输入翻译成操作系统内核(kernel)
能够识别的指令,并且操作系统内核执行完将返回的输出通过shell再呈现给用户.

计算机对除机器语言以外的源程序不能直接识别、理解和执行,都必须通过某种方式
转换为计算机能够直接执行的。
这种将高级编程硬件程序设计语言编写的源程序转换
到机器目标程序的方式有两种:解释方式和编译方式。

常见的编程语言分为两类:一个是编译型语言,如:c/c++/等,
它们远行前全部一起要经过编译器的编译。另一个解释型语言,执行时,
需要使用解释器一行一行地转换为代码,如:awk, perl,java, python与shell等。

Shell也是一门编程语言,即shell脚本,shell是解释执行的脚本语言,
可直接调用linux命令。
shell编程就是对一堆Linux命令的逻辑化处理。

虽然没Shell有 C/C++、Python、Java、C# 等编程语言强大,
但也支持了基本的编程元素,
例如: 变量、数组、字符串、注释、加减乘除等概念。if…else 选择结构,for、while、
until 循环等流程控制语句。为了方便模块化开发,Shell 也支持自定义函数。

除了 Shell,能够用于 Linux 运维的脚本语言还有 Python 和 perl

二、shell 能干什么

1、实现自动化系统批量的初始化工作(时间设置,update,安全策略设置)
2、自动化批量的软件部署(LAMP/lvs/tomcat/nginx)
3、日志的分析处理程序(比如多少返回200的码)
4、管理应用程序
5、自动化的备份回复程序(比如mysql的备份与回复+计划任务去备份)
6、自动化的管理程序(批量远程修改改密码程序)
7、自动化采集及监控程序(收集应用的状态信息比如cpu的使用,内存的使用,
磁盘的使用和网络的使用等)等待

三、查看当前使用的shell

一个系统可以存在多个shell,可以通过cat /etc/shells命令查看
系统中安装有那些shell,
不同的shell可能支持的命令语法是不相同的。
常用的shell主要有:sh (bash) 和csh(C shell(csh和tc shell(tcsh))
csh 是Linux比较大的内核,它由以William Joy为代表的共计47位作者编成,
   共有52个内部命令。该shell其实是指向/bin/tcsh这样的一个shell,
   也就是说,csh其实就是tcsh。

 
 查看当前使用的shell: echo $SHELL

四、shell程序执行过程及编写说明

1、程序执行及说明
        1-1指令的执行是从上而下、从左往右的分析执行
		1-2 指令执行时 指令、选项和参数间的多个空白都会被忽略掉
        1-3 #单号注释也会被忽略掉
		1-4 如果一行的内容太多,则可以使用『 \[Enter] 』来延伸至下一行 \
        1-5 shell程序脚本编写文件头注释建议:
		                                   1. 内容功能;
                                           2. 版本信息;
										   3、修改日期;
										   4.作者名称。								   
2、Shell 的编写流程:
		1. 编写 Shell 脚本 
		2. 赋予可执行权限 
		3. 执行,调试
	
3、代码注释
		多行注释 
		
		多行注释还可以使用以下格式:
		:<<EOF
		注释内容...
		注释内容...
		注释内容...
		EOF  (小写也可以)
	

	
执行(){}
(){}都是对一串的命令进行执行,但有所区别:
相同点:
(){}都是把一串的命令放在括号里面,并且命令之间用;号隔开
不同点
()只是对一串命令重新开一个子shell进行执行,{}对一串命令在当前shell执行
()最后一个命令可以不用分号,{}最后一个命令要用分号
()里的第一个命令和左边括号不必有空格,{}的第一个命令和左括号之间必须要有一个空格
(){}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令
if (( a > b )) && (( a < c )) 或者if [[ $a > $b ]] && [[ $a < $c ]] 或者if [ $a -gt $b -a $a -lt $c ] 

五、shell脚本的执行

**1、Shell有两种执行命令的方式:**

	交互式(Interactive):解释执行用户的命令,用户输入一条命令,
	Shell就解释执行一条。
	批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,
	 让Shell一次把这些命令执行完,而不必一条一条地敲命令。
	对于批处理方式可以这样执行程序:bash 脚本名称  或 ./脚本名称

两种执行shell的区别
2、sh和bash命令用法:
sh FileName
bash FileName
作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"
注:两者在执行文件时的不同,是分别用自己的shell来跑文件。

sh使用“-n”选项进行shell脚本的语法检查,使用“-x”选项实现shell脚本逐条语句的跟踪,

可以巧妙地利用shell的内置变量增强“-x”选项的输出信息等。

3、./的命令用法:
./FileName
作用:打开一个子shell来读取并执行FileName中命令。
注:运行一个shell脚本时会启动另一个命令解释器.
每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.
这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.
shell脚本也可以启动他自已的子进程.
这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.

六、输入与输出命令

1、echo 选项 内容 (相当于python中的print)相当于C语言中printf
-n 不换行
-e 支持转义字符
注意echo支持转义为:\ ,\n,\t

printf "%.2f--%d" 12.3  5.0  

2、read 选项  [变量名称] (相当于python中的input) 相当于 C语言中scanf
        -p 可以加输入提示
注意:在read命令行中也可以不指定变量.如果不指定变量,
      那么read命令会将接收到的数据放置在环境变量REPLY中。
	  
	  在上面read后面的变量只有name一个,也可以有多个,这时如果输入多个数据,
	  则第一个数据给第一个变量,第二个数据给第二个变量,
#例子1:
#!/bin/bash
read -p "Enter your name:" name   

echo "hello $name, welcome to my program"
exit 0
#例子2:
#!/bin/bash  #声明用那个解释器来解释执行下边的程序
echo "请输入第一个数"
read num1  #read命令加 -p选项可以加输入提示
echo "请输入第二个数"
read num2
echo "显示结果为:num1=$num1 num2=$num2"
echo $(($num1+$num2))
echo "读入测试"
read
echo $REPLY #read不指定变量讲赋值给内置变量REPLY

3、alias 用来给命令创建一个别名。若直接输入该命令且不带任
何参数,
则列出当前 Shell 环境中使用了哪些别名。现在你应该能
理解类似ll这样的命令
为什么与ls -l的效果是一样的。
看一下有哪些命令被默认创建了别名:
alias
alias myShutdown=‘shutdown -h now’
注意:这样定义别名只能在当前 Shell 环境中有效,换句话说,重新登录后这个别名
就消失了。为了确保永远生效,可以将该别名手动写入到用户主目录中的.bashrc文件。
.bashrc其实也是一个 Shell 脚本文件,该文件专门用来存
放用户自定义的别名和函数。
在.bashrc中增加别名变量后,不会立即有效 重启终端就可以使用
使用 unalias 内建命令可以删除当前 Shell 环境中的别名

七、我的第一个shell脚本

#!/bin/bash  #声明用那个解释器来解释执行下边的程序
#我的第一个shell程序---这个是单行注释
name="axl" #定义变量  
echo $name  #打印变量的值  ${name} 此大括号可以省略,在不引起歧义的情况下
echo  $*  #代表所有的参数
echo "参数个数为$#" #$1”    

特殊变量说明
$* 代表所有的参数(我们在shell命令后面加了hello 和world两个参数)。
$# 代表参数的个数
$n 这里的n为数字代表第几个参数   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值