1.什么是shell?
shell是一个命令解释器. 是介于操作系统内核与用户之间的一个绝缘层。对于一个linux系统使用人员来说,shell是你驾驭类linux系统最基本的工具。所有的系统命令和工具再加上应用程序,对于shell脚本来说,都是可调用的。
shell扮演者操作系统内核和用户的中间人的角色,用户通过键入shell command,然后shell通过解析用户输入,然后将请求转发给操作系统的内核进行处理。

1)一个系统可以存在多个shell,可以通过cat /etc/shells命令查看系统中安装的shell,不同的shell可能支持的命令语法是不相同的。
2) 可以通过echo $SHELL查看当前使用的shell

2、为什么使用shell编程?
没有程序语言是完美的. 甚至没有一个唯一最好的语言, 只有对于特定目的, 比较适合和不适合的程序语言。对于任何想适当精通一些系统管理知识的人来说,掌握shell脚本知识都是最基本的。玩转linux,就得知道shell,shell命令是指挥linux的密码。
我们在linux系统上经常会遇到很多重复性的操作,而且手动操作的话,效率低,容易出错,浪费我们大量时间。这个时候不妨考虑使用shell脚本,
让脚本把我们从繁杂的工作中解脱出来,留下更多的时间享受生活,岂不很好。

小知识:
1)查询linux版本的命令 lsb_release -a
allen@allen-K42JE:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04 LTS
Release: 14.04
Codename: trusty

2)查询bash版本的命令 echo $BASH_VERSION
allen@allen-K42JE:~$ echo $BASH_VERSION
4.3.8(1)-release

3、shell命令是如何分层的?
shell命令分为以下五种:
• Alias(别名)
• Function(函数)
• Shell built in(内部命令)
• Keyword(关键字)
• File
可以用type查询shell命令的类型
type ls quote pwd do id

4、shell的编辑器
建议使用vim,作为linux的使用者,使用vim编辑器是必须的事情。
我使用的ubuntu系统(其它系统可能不一样),配置vim文件vimrc
sudo vi /etc/vim/vimrc

详细配置如下:
• showmode: Ensures we see when we are in insert mode
• nohlsearch: Does not highlight the words that we have searched for
• autoindent: We indent our code often; this allows us to return to the last
indent level rather than the start of a new line on each carriage return
• tabstop=4: Sets a tab to be four spaces
• expandtab: Converts tabs to spaces, which is useful when the file moves to
other systems
• syntax on: Note that this does not use the set command and is used to turn
on syntax highlighting
When these options are set, the $HOME/.vimrc file should look similar to this:
set showmode nohlsearch
set autoindent tabstop=4
set expandtab
syntax on

5、创建一个hello world的shell程序。
1) vi $HOME/bin/hello1.sh,加入下面语句
#!/bin/bash
echo "Hello world."
exit 0
2)chmod +x $HOME/bin/hello1.sh,添加可执行权限
3) hello1.sh,执行程序

6、Checking the exit status
shell有一个专门的变量可以查询上一条shell命令的返回值
hello1.sh
echo $?
我们会看到输出0.

7、shell的变量简介
大家都知道,编程会用到变量,这里必须说一下shell的变量,按使用目的分三种类型:
1)环境变量:BASH,PWD,SHELL,USER等(可以用set命令查询)
2)系统预置变量:
Bash定义了9个位置变量,分别是$1、$2、$3、$4…$9.脚本编写者在脚本中引用这9个变量,获取传递给脚本的参数。
$0:保存当前进程或脚本的名称。
$*或$@:保存传递给脚本或进程的所有参数。
$$:当前进程或脚本的PID。
$!:后台运行的最后一个进程的PID号。
$?:用于返回上一条命令是否执行成功。如果成功执行,将返回数字0,否则返回非零数字(通常情况下都返回数字1)。
$#:用于保存脚本的参数个数。
3)用户自定义变量
【自定义变量的命名规则】
由于变量没有具体的数据类型,因此在定义变量时可以不必定义其类型,直接赋值即可使用。
在Shell中变量名称可以由大写字母、小写字母、下划线、数字等符号组成。
定义变量时,建议使用大写字母、下划线和数字组成变量名,以免引起不必要的误解。
变量对大小写敏感。

【变量的作用域】
变量的作用域是指变量的引用范围,也可以理解为变量在哪个区域起作用。Bash中的变量作用域规则可以归纳为以下两点:
除非使用了export命令,否则在脚本中定义的变量(包括函数中定义的变量)的作用域是整个脚本。
使用export定义的变量都是全局变量。全局变量可以在当前用户的任何脚本、命令中引用。
从以上两点可以看出,如果用户需要在脚本中定义全局变量,必须使用export命令。

第16篇 Shell脚本基础(一)的更多相关文章

  1. Linux基础篇–shell脚本编程基础

    本章内容概要  编程基础  脚本基本格式  变量  运算  条件测试  配置用户环境 7.1 编程基础程序:指令+数据程序编程风格:   过程式:以指令为中心,数据服务于指令   对象式:以数据为中心 ...

  2. Linux shell脚本基础学习详细介绍(完整版)二

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  3. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  4. Shell脚本基础学习

    Shell脚本基础学习 当你在类Unix机器上编程时, 或者参与大型项目如k8s等, 某些框架和软件的安装都是使用shell脚本写的. 学会基本的shell脚本使用, 让你走上人生巅峰, 才怪. 学会 ...

  5. 什么是Shell?Shell脚本基础知识详细介绍

    这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...

  6. 详细介绍Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  7. shell脚本-基础

    shell脚本-基础 编程基础 程序是指令+ 数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell 程序提供了编程能力,解释执行. 计算运行二进 ...

  8. shell脚本 基础应用

    变量分为普通变量可只读变量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 ...

  9. shell脚本基础知识

    虽然现在能在Linux系统下生存,但是自觉效率太低,和高手有很大的差距. 这就是关于Linux的知识太过匮乏,有很多事情知道该怎么做,但是就是没法在Linux下实现,为了提升工作效率,必须要接触Lin ...

随机推荐

  1. 俄罗斯最新开源的牛掰数据库ClickHouse

    ClickHouse是俄罗斯最近刚刚开源的用于数据库管理系统能够实时生成分析数据报告,性能非常强悍! 使用SQL查询. 他拥有切割你的数据更多的新方法 ClickHouse的性能超过同类市场上目前用于 ...

  2. tar 解压命令学习与总结

    tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个 ...

  3. quartz(2) -- 入门案例

    第一步:添加jar,maven配置 <!-- quartz --> <dependency> <groupId>org.quartz-scheduler</g ...

  4. hadoop 2.7.3 源码编译教程

    1.工具准备,最靠谱的是hadoop说明文档里要求具备的那些工具. 到hadoop官网,点击source下载hadoop-2.7.3-src.tar.gz. 解压之 tar -zxvf hadoop- ...

  5. Google protobuf序列化以及反序列化

    序列化的目的是将对象持久化到硬盘或者用于网络传输.java也提供了序列化技术,非常简单,只要实现Serializable接口即可.如下: public class commonService impl ...

  6. JMS-activeMq点对点模式

    上一篇对JMS进行介绍了一下,接下来总结一下activemq点对点模式以及订阅发布模式. (1)下载:首先到官网http://activemq.apache.org下载activemq (2)运行:解 ...

  7. MySQL安装详解图文版(V5.5 For Windows)

    MySQL在Windows中会得到越来越广泛的应用.故整理MySQL安装详解如下,以备不时之需.安装环境:Windows Server 2003 [32bit NTFS]版本信息:MySQL 5.5. ...

  8. DPDK编程指南 2.概述

    本章节给出了DPDK架构的一个全局概述. DPDK的主要目的就是为数据面快速报文处理应用程序提供一个简洁完整的框架.用户可以通过代码来理解其中使用的一些技术,构建自己的应用程序或添加自己的协议栈.Al ...

  9. Android报错Type Error executing aapt: Return code -1 - HTTP 500

    我的做法是(乱蒙对的) 把menu.xml干掉!,对的你没看错! 当然其他人方案:如下 1.http://stackoverflow.com/questions/10699439/aapt-filin ...

  10. python函数式编程之返回函数、匿名函数、装饰器、偏函数学习

    python函数式编程之返回函数 高阶函数处理可以接受函数作为参数外,还可以把函数作为结果值返回. 函数作为返回值 def laxy_sum(*args): def sum(): ax = 0; fo ...