shell根本知识

瑞星  金牌会员 | 2024-12-22 00:45:16 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 852|帖子 852|积分 2556

1、为什么学习和使用Shell编程

对于一个合格的系统管理员来说,学习和把握Shell编程好坏常紧张的。通过编程,可以在很大程度 上简化日常的维护工作,使得管理员从简单的重复劳动中摆脱出来。
shell程序的特点:
1、简单易学
2、表明性语言,不需要编译即可执行


2、 什么是Shell

在学习Shell编程之前,必须弄清晰什么是Shell。为了可以大概使读者在学习具体的Shell编程之前对 Shell有个根本的了解,本节将对Shell进行概括性的先容,包罗Shell的起源和功能。
(1)shell的起源


  • 1964年,美国AT&T公司的贝尔实验室、麻省理工学院及美国通用电气公司共同参与开始研发一套 可以安装在大型主机上的多用户、多任务的操作系统,该操作系统的名称为Multics。
  • 1970年,丹尼斯•里奇和汤普逊启动了另外一个新的多用户、多任务的操作系统的项目,他们把这 个项目称之为UNICS。
  • 1973年,使用C语言重新编写了Unix。通过这次编写,使得Unix得以移植到其他的小型机上面。 1979年,第一个紧张的标准UNIX Shell在Unix的第7版中推出,并以作者史蒂夫•伯恩(Stephen Bourne)的名字命名,叫做Bourne Shell,简称为sh。
  • 20世纪70年代末,C Shell作为2BSD UNIX的一部分发布,简称csh。 之后又出现了很多其他的Shell程序,重要包罗Tenex C Shell(tcsh)、Korn Shell(ksh)以及 GNU Bourne-Again shell(bash)。
(2) shell的功能
Shell又称下令表明器,它能识别用户输入的各种下令,并传递给操作系统。它的作用类似于 Windows操作系统中的下令行,但是,Shell的功能远比下令行强盛的多。在UNIX或者localhost中, Shell既是用户交互的界面,也是控制系统的脚本语言。

3、shell的分类



  • Bourne Shell:标识为sh,该Shell由Steve Bourne在贝尔实验室时编写。在很多Unix系统中,该 Shell是root用户的默认的Shell。
  • Bourne-Again Shell:标识为bash,该Shell由Brian Fox在1987年编写,是绝大多数localhost发行 版的默认的Shell。
  • Korn Shell:标识为ksh,该Shell由贝尔实验室的David Korn在二十世纪八十年代早期编写。它完 全向上兼容 Bourne Shell 并包含了C Shell 的很多特性。
  • C Shell:标识为csh,该Shell由Bill Joy在BSD系统上开发。由于其语法类似于C语言,因此称为C Shell。
如何检察当前系统支持的shell?
  1. [root@localhost ~]# cat   /etc/shells
  2. /bin/sh
  3. /bin/bash
  4. /sbin/nologin
  5. /usr/bin/sh
  6. /usr/bin/bash
  7. /usr/sbin/nologin
复制代码
如何检察当前系统默认shell?
  1. [root@localhost ~]# echo $SHELL
  2. /bin/bash
复制代码


4、 作为程序设计的语言——shell

Shell不仅仅是充当用户与UNIX或者localhost交互的角色,还可以作为一种程序设计语言来使 用。通过Shell编程,可以实现很多非常实用的功能,提高系统管理的自动化水平。
假如有一系列经常需要使用的下令,把它存储在一个文件里,shell可以读取这个文件并顺序执 行此中的下令,我们把这样的文件就叫shell脚本。shell脚本按行表明文件里的下令。

5、 如何学好shell

学好shell编程基础知识:
1. 熟练使用vi(vim)编辑器
2. 熟练把握Linux根本下令
3. 熟练把握文本三剑客工具(grep、sed、awk)
   grep - 全称是“Global Regular Expression Print”,用于搜索文本文件中匹配特定模式的字符 串。它支持正则表达式,可以大概快速地扫描大文件并找出包含指定模式的行。
  sed - 全称是“Stream Editor”,用于对文本流执行根本的文本更换、删除和插入操作。sed通 常用于不需要用户交互的环境下自动编辑文件。
  awk - 是一种编程语言,用于模式扫描和处理语言。它特殊善于于处理格式化的文本数据,如 表格或陈诉。awk可以大概执行复杂的文本操作,包罗选择数据、对数据进行盘算和重新格式化文 本。
  例如,可以使用grep来过滤出包含特定关键字的行,然后通过管道传递给sed来对这些行进行编 辑,末了使用awk来对这些数据进行格式化或盘算。
例如,可以通过grep快速从系统日志中找堕落误信息,使用sed修改配置文件中的设置,以及用 awk处理和汇总系统统计数据。把握这些工具可以大概明显提高工作效率和问题解决速率。
4. 认识常用服务器部署、优化、日志及排错
什么是驼峰语法?
骆驼式命名法就是当变量名或函数名是由一个或多个单词连结在一起,而构成的唯一识别字 时,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母,例如: myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。
除了驼峰命名法,另外另有匈牙利命名法。根本原则是:变量名=属性+范例+对象形貌。匈牙 利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母大写的一 个单词或多个单词组合,该单词要指明变量的用途。好比m_lpszStr, 表示指向一个以0字符末端的字符串 的长指针成员变量。
另外,有些程序员喜好用下划线。好比file_name。

6、 shell脚本的誊写规范

1.通常环境下,我们会给shell脚本起名为filename.sh
2.第一行写声明,声明当前的shell脚本使用哪个下令表明器去表明:#!/bin/bash
3.除了第一行以外的以#开头的行都为注释


  • shell脚本的作者
  • shell脚本的创建时间
  • 脚本的作用,下令的阐明
  1. #编辑.sh文件时自动生成关于脚本文件说明的注释
  2. [root@localhost ~]# cat /root/.vimrc
  3. autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
  4. func SetTitle()
  5. if expand("%:e") == 'sh'
  6. call setline(1,"#!/bin/bash")
  7. call setline(2,"#########################")
  8. call setline(3,"#File name:".expand("%"))
  9. call setline(4,"#Version:v1.0")
  10. call setline(5,"#Email:admin@test.com")
  11. call setline(6,"#Created time:".strftime("%F %T"))
  12. call setline(7,"#Description:")
  13. call setline(8,"#########################")
  14. call setline(9,"")
  15. endif
  16. endfunc
复制代码


7、shell脚本的执行方式

(1)交互式执行
  1. [root@localhost ~]# for   filename in `ls /etc`
  2. > do
  3. > if echo "$filename" | grep "passwd"
  4. > then
  5. > echo "$filename"
  6. > fi
  7. > done
复制代码
(2)作为程序文件执行(常用)
对于一组需要经常重复执行的Shell语句来说,将它们保存在一个文件中来执行。我们通常称这 种包含多个Shell语句的文件为Shell脚本,或者Shell脚本文件。脚本文件是普通的文本文件,可使用任何 的文本编辑器检察或修改Shell脚本。
  1. [root@localhost ~]# mkdir  /test
  2. [root@localhost ~]# cd /test
  3. [root@localhost test]# vim   test1.sh
  4. #!/bin/bash
  5. for filename in `ls /etc`
  6. do
  7. if echo "$filename" | grep "passwd"
  8. then
  9. echo "$filename"
  10. fi
  11. done
复制代码


8、 执行脚本的方法

(1)bash ./filename.sh(产生子历程,再运行,使用当前指定的bash shell去运行) (2)./filename.sh(产生子历程,再运行,使用脚本里面指定的shell去运行。使用该种方式执行需要x 权限)
(3)source ./filename.sh(source下令是一个shell内部下令,其功能是读取指定的shell程序文件,并 且依次执行此中的全部的语句,并没有创建新的子shell历程,所以脚本里面全部创建的变量都会保存到 当前的shell里面)
(4). filename.sh(和source一样,也是使用当前历程执行)
示例一:
  1. [root@localhost test]# vim test2.sh
  2. #!/bin/bash
  3. cd /tmp
  4. pwd
  5. [root@localhost test]# ls -l test2.sh-rw-r--r--. 1 root root 24 Apr 30 20:09 test2.sh
  6. (1)[root@localhost test]# bash test2.sh
  7. /tmp
  8. (2)[root@localhost test]# ./test2.sh-bash: ./test2.sh: Permission denied
  9. [root@localhost test]# chmod   a+rx   test2.sh
  10. [root@localhost test]# ./test2.sh
  11. /tmp
  12. (3)[root@localhost test]# source  test2.sh
  13. /tmp
  14. [root@localhost tmp]#
  15. (4)[root@localhost test]# .  test2.sh
  16. /tmp
  17. [root@localhost tmp]#
复制代码
执行shell脚本时,假如使用1和2这种方式执行会在当前的历程下产生一个新的bash子历程,所以子历程 切换到了/tmp目次,当脚本结束,子历程也就结束了,所以当前历程的目次不会发生变革;3和4方式执 行时,不会产生新的历程,所以脚本执行结束后当前的目次会变成/tmp。
示例二:
  1. [root@localhost test]# echo   'userdir=`pwd`' > test3.sh
  2. [root@localhost test]# cat test3.sh
  3. userdir=`pwd`
  4. (1)[root@localhost test]# bash   test3.sh
  5. [root@localhost test]# echo   $userdir
  6. [root@localhost test]#
  7. (2)[root@localhost test]# chmod  a+rx test3.sh
  8. [root@localhost test]# ./test3.sh
  9. [root@localhost test]# echo $userdir
  10. [root@localhost test]#
  11. (3)[root@localhost test]# source  test3.sh
  12. [root@localhost test]# echo $userdir
  13. /test
  14. (4)[root@localhost test]# . test3.sh
  15. [root@localhost test]# echo $userdir
  16. /test
复制代码

9、 shell脚本的退出状态码

在UNIX或者Linux中,每个下令都会返回一个退出状态码。退出状态码是一个整数,其有效范 围为0~255。通常环境下,成功的下令返回0,而不成功的下令返回非0值。非0值通常都被表明成一个错误码。举动精良的UNIX下令,程序和工具都会返回0作为退出码来表示成功。
Shell脚本中的函数和脚本本身也会返回退出状态码。在脚本或者是脚本函数中执行的末了的下令会决定 退出状态码。另外,用户也可以在脚本中使用exit语句将指定的退出状态码传递给Shell。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表