初识Shell

Shell 是一个用 C 语言编写的程序,Shell 既是一种命令语言,又是一种程序设计语言。

Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。实际上,shell是一个提供给用户用来交互的软件shell并不是内核的一部分,却通过系统调用来执行程序,比如创建文件等。

Shell 脚本:

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。shell 和 shell script 是两个不同的概念。

Shell 版本:

Shell 环境:

Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

Linux 的 Shell 种类众多,常见的有:

(1)Bourne Shell(/usr/bin/sh或/bin/sh)

(2)Bourne Again Shell(/bin/bash)--Bash (易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell;)

(3)C Shell(/usr/bin/csh)

(4)K Shell(/usr/bin/ksh)

(5)Shell for Root(/sbin/sh)

……

在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为 #!/bin/bash。

#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

Shell脚本:

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用 php 好了。

shell通常都是一些交互指令,你通过键盘输入指令,shell执行并且返回结果。当有大量命令需要执行时,一条一条交互就显得太没有效率,这时候就可以把这些指令存入文本文件,并且可以添加控制语句,像程序流程那样控制指令的运行。这就是shell script。

例如:

#!/bin/bash

echo "Hello World !"

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

echo 命令用于向窗口输出文本。

如何查看系统支持的shell:

$ cat /etc/shells

查看当前正在使用的shell:

$ echo $SHELL

运行 Shell 脚本有两种方式:

1、作为可执行程序

将上面的代码保存为 test.sh,并 cd 到相应目录:

chmod +x ./test.sh  #使脚本具有执行权限

./test.sh  #执行脚本

注意:一定要写成 ./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux 系统会去 PATH 里寻找有没有叫 test.sh 的,而只有 /bin, /sbin, /usr/bin,/usr/sbin 等在 PATH 里,你的当前目录通常不在 PATH 里,所以写成 test.sh 是会找不到命令的,要用 ./test.sh 告诉系统说,就在当前目录找。

2、作为解释器参数

这种运行方式是,直接运行解释器,其参数就是 shell 脚本的文件名,如:

/bin/sh test.sh

/bin/php test.php

这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。

sh/bash/csh/Tcsh/ksh/pdksh等shell的区别

     ·     sh(全称 Bourne Shell): 是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。
    Bourne Shell 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种 shell。

     ·     bash(全称 Bourne Again Shell): LinuxOS 默认的,它是 Bourne Shell 的扩展。
    与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基础上增加了很多特性。可以提供命令补全,命令编辑和命令历史等功能。它还包含了很多 C Shell 和 Korn Shell 中的优点,有灵活和强大的编辑接口     ,同时又很友好的用户界面。

     ·     csh(全称 C Shell): 是一种比 Bourne Shell更适合的变种 Shell,它的语法与 C 语言很相似。

     ·     Tcsh: 是 Linux 提供的 C Shell 的一个扩展版本。
    T csh 包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似 C 语言的语法,他不仅和 Bash Shell 提示符兼容,而且还提供比 Bash Shell 更多的提示符参数。

     ·    ksh (全称 Korn Shell): 集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。

     ·    pdksh: 是 Linux 系统提供的 ksh 的扩展。
   p dksh 支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。

ubuntu(linux)下 source、sh、bash、./ 执行脚本的区别是什么?

1. source命令用法:

source FileName

作用:在当前 bash 环境下读取并执行 FileName 中的命令。该 filename 文件可以无 "执行权限"。

注:该命令通常用命令 . 来替代。

2. sh、bash的命令用法:

sh FileName或

bash FileName

作用:打开一个子 shell 来读取并执行 FileName 中命令。该 filename 文件可以无 "执行权限"。

注:运行一个shell脚本时会启动另一个命令解释器。

3、./的命令用法:

./FileName

作用: 打开一个子 shell 来读取并执行 FileName 中命令,该 filename 文件需要 "执行权限"。

注:运行一个 shell 脚本时会启动另一个命令解释器。

 

如何写一个shell脚本:

根据以下步骤我们来写一个shell脚本: 
1. 使用编辑器,可以是vi/vim,emacs,当然也可以是gedit , sublime这一类的软件 
2. 编辑好你的shell 脚本后,为你的脚本添加可执行权限: 
语法格式:chmod 权限 脚本名称 
例:

$ chmod +x your-script-name

$ chmod 755 your-script-name

Note: 755意味着user拥有读写执行的权限,group和other只拥有读和执行权限,更多有关的知识可查看Linux文件权限。 
3. 执行shell脚本 
语法格式:

bash your-script-name

sh your-script-name

./your-script-name

一般大家都是用 ./your-script-name 来执行, . 意味着当前文件夹内,但是如果仅仅使用 . your-acript-name,shell不会另起一个进程执行你的命令,意味着执行完你的脚本后,shell就会退出,你可以在你的机器上试一下。

好吧,让我们开始写一个shell脚本吧! 
使用vim新建一个脚本vim fisrt.sh, 内容如下:

## My fisrt shell script#

clear

echo "Hello,shell!"

执行 ./fisrt.sh ,很明显无法运行。添加执行权限:

$ chmod 755 fisrt.sh$ ./fisrt.sh

脚本命令

含义

My fisrt shell script

在shell脚本里面起到注释的作用,单行注释

clear

清屏命令

echo “Hello,shell!”

向屏幕输出内容

下面写个更复杂的吧,vim ginfo:

#

#

# Script to print user information who currently login , current date & time

#

clear

echo "Hello $USER"

echo -e "Today is \c ";date

echo -e "Number of user login : \c" ; who | wc -l

echo "Calendar"

cal

exit 0

添加可执行权限后,./ginfo输出如图:

上面这段脚本输出当前用户,打印当前时间,输出日历信息。

 

初识Shell与Shell脚本的更多相关文章

  1. 【Shell脚本学习1】Shell简介:什么是Shell,Shell命令的两种执行方式

    Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释 ...

  2. [拾 得] 一枚迷人的贝壳 SHELL / Linux | shell 脚本初步入门

    坚持知识分享,该文章由Alopex编著, 转载请注明源地址: http://www.cnblogs.com/alopex/   索引: 什么是shell shell的分类 shell脚本的执行方式   ...

  3. Linux编程 20 shell编程(shell脚本创建,echo显示信息)

    一概述 前面19章里已经掌握了linux系统和命令行的基础知识,从本章开始继续学习shell脚本的基础知识.在大量编辑shell脚本前,先来学习下一些基本概念. 1.1    使用多个命令 Shell ...

  4. Hadoop概念学习系列之Java调用Shell命令和脚本,致力于hadoop/spark集群(三十六)

    前言 说明的是,本博文,是在以下的博文基础上,立足于它们,致力于我的大数据领域! http://kongcodecenter.iteye.com/blog/1231177 http://blog.cs ...

  5. Shell - 简明Shell入门01 - 第一个脚本(HelloShell)

    示例脚本及注释 #!/bin/bash echo "hello shell!" # 打印字符串"hello shell!" echo "Date: & ...

  6. 什么是Shell、Shell脚本

    Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种 ...

  7. Shell记录-Shell脚本基础(一)

    Shell 注释: 你可以把注释,在你的脚本如下: #!/bin/bash # Author : Zara Ali # Copyright (c) Tutorialsyiibai.com # Scri ...

  8. Bash Shell启动配置脚本的顺序

    1.Bash检查环境变量文件的方式,取决于系统运行Shell的方式,通常系统运行Shell有3种方式: )通过系统用户登陆后默认运行的Shell )非登陆交互式运行Shell )执行脚本运行非交互式S ...

  9. Shell执行将脚本里的变量打印到指定日志文件

    首先需要定位获取任务的运行日志或者报错信息,才能定位问题. 通过shell调用有些脚本的话,日志信息会打印在shell里.不过也有用户在shell里调用正常,但是到crontab调用的时候就出错并且没 ...

随机推荐

  1. 利用media query让背景图适应不同分辨率的设备

    随着上网方式的多样化,用户选择上网的工具不再仅是PC,而可以是手机,或者平板电脑.随之而来的问题是如何让网页适应不同分辨率,这给前端工程师们带来了新的挑战,其中重要的一点是如何让图片能在不同的分辨率下 ...

  2. android基础---->service的生命周期

    服务是一个应用程序组件代表应用程序执行一个长时间操作的行为,虽然不与用户交互或供应功能供其它应用程序使用.它和其他的应用对象一样,在他的宿主进程的主线程中运行.今天我们开始android中普通serv ...

  3. Unity3D Shader 按百分比裁剪模型

       Shader Shader "Unlit/Disappear" { Properties { _MainTex ("Texture", 2D) = &qu ...

  4. Intersection Observer API 可以让你知道被观察元素何时进入或退出浏览器的视口

    google 文档 https://developers.google.cn/web/updates/2016/04/intersectionobserver MDN 文档 https://devel ...

  5. python 中的流程控制语句

    原文 if 语句 >>> x = int(input("Please enter an integer: ")) Please enter an integer: ...

  6. windows 上的 neovim 配置

    可以使用简单的 linux 下 neovim 配置,增加了对 golang, python,  ruby 脚本文件一键运行快捷方式. """""&qu ...

  7. PHP封装类 【 设置分页 】 !!! 可以直接引用 !!! 都有自己理解的注释,挺详细的,有搜到的朋友可以能帮到你们 【 新手一看练两遍就懂 】

    在网页要显示出的内容,就是客户能看到的东西 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &q ...

  8. Android超精准计步器开发-Dylan计步(申明:来源于网路)

    Android超精准计步器开发-Dylan计步(申明:来源于网路) 拿来借鉴学习,向原创者... 地址:http://blog.csdn.net/linglongxin24/article/detai ...

  9. Missing artifact com.h2database:h2:jar:1.4.197

    之前OK的项目再次打开pom上报错: 一起出现的现象: maven库中这个包和H2数据库的包每次项目右键→maven→update project都会产生.lastupdate文件.原来是以前从mav ...

  10. 京东无人超市的成长之路 如何利用AI技术在零售业做产品创新?

    随着消费及用户体验的需求升级.人货场的运营效率需求提升.人工智能技术的突破以及零售基础设施的变革等因素共同推动了第四次零售革命的到来,不仅在国内,国外一线巨头互联网亚马逊等企业都在研发无人驾驶.无人超 ...