1.1 简介

Shell是一个C语言编写的脚本语言,它是用户与Linux的桥梁,用户输入命令交给Shell处理,Shell将相应的操作传递给内核(Kernel),内核把处理的结果输出给用户。

下面是处理流程示意图:

Shell既然是工作在Linux内核之上,那我们也有必要知道下Linux相关知识。

Linux是一套免费试用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。

1983年9月27日,Richard Stallman(理查德-马修-斯托曼)发起GNU计划,它的目标是创建一套完全自由的操作系统。为保证GNU软件可以自由的使用、复制、修改和发布,所有的GNU软件都有一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,GNU通用公共许可证(GNU General Plubic License,GPL),说白了就是不能做商业用途。

GNU是"GNU is Not Unix"的递归缩写。UNIX是一种广泛使用的商业操作系统的名称。

1085年,Richard Stallman又创立了自由软件基金会(Free Software Foundation,FSF)来为GNU计划提供技术、法律以及财政支持。

1990年,GNU计划开发主要项目有Emacs(文本编辑器)、GCC(GUN Compiler Collection,GNU编译器集合)、Bash等,GCC是一套GNU开发的编程语言编译器。还有开发一些UNIX系统的程序库和工具。

1991年,Linuxs Torvalds(林纳斯- 托瓦兹)开发出了与UNIX兼容的Linux操作系统内核并在GPL条款下发布。

1992年,Linux与其他GUN软件结合,完全自由的GUN/Linux操作系统正式诞生,简称Linux。

1995年1月,Bob Young创办ACC公司,以GNU/Linux为核心,开发出了RedHat Linux商业版。

Linux基本思想有两点:第一,一切都是文件;第二,每个软件都有确定的用途。与Unix思想十分相近。

1.2 Shell基本分两大类

1.2.1 图形界面Shell(GUI Shell)

GUI为Unix或者类Unix操作系统构造一个功能完善、操作简单以及界面友好的桌面环境。

主流桌面环境有KDE,Gnome等。

1.2.2 命令行界面Shell(CLI Shell)

CLI是在用户提示符下键入可执行指令的界面,用户通过键盘输入指令,完成一系列操作。

在Linux系统上主流的CLI实现是Bash,是许多Linux发行版默认的Shell。还有许多Unix上用的Shell,例如tcsh、csh、ash、bsh、ksh等等。

1.3 第一个Shell脚本

本教程主要讲解在大多Linux发行版下默认Bash Shell。Linux系统是RedHat下的CentOS操作系统,完全免费。与其商业版RHEL(Red Hat Enterprise Linux)出自同样的源代码,不同的是CentOS并不包含封闭源代码软件和售后支持。

用vi打开test.sh,编写:

# vi test.sh
#!/bin/bash
echo "Hello world!"

第一行设置运行环境,第二行打印Hello world!

写好后,开始执行,执行Shell脚本有三种方法:

方法1:直接用bash解释器执行
# bash test.sh
Hello world!方法2:添加可执行权限
# ll test.sh
-rw-r--r--. 1 root root 32 Aug 18 01:07 test.sh
# chmod +x test.sh
# ./test.sh
-bash: ./test.sh: Permission denied
# chmod +x test.sh
# ./test.sh # ./在当前目录
Hello world!方法3:source命令执行,以当前默认Shell执行
# source test.sh
Hello world!

1.4 Shell变量

1.4.1 系统变量

在命令行提示符直接执行env、set查看系统或环境变量。env显示用户环境变量,set显示Shell预先定义好的变量以及用户变量。可以通过export导出成用户变量。

一些写Shell脚本时常用的系统变量:

$SHELL 默认Shell
$HOME 当前用户家目录
$IFS 默认内部域分隔符
$LANG 默认语言
$PATH 默认可执行程序路径
$PWD 当前目录
$UID 用户ID
$USER 当前用户
$HISTSIZE 历史命令大小,可通过HISTTIMEFORMAT变量设置命令执行时间

1.4.2 普通变量与临时环境变量

普通变量定义:VAR=value

临时环境变量定义:export VAR=value

变量引用:$VAR

下面看下他们之间区别:

Shell进程的环境变量作用域是Shell进程,当export导入到系统变量时,则作用域是Shell进程及其Shell子进程。

ps axjf输出的第一列是PPID(父进程ID),第二列是PID(子进程ID)

当SSH连接Shell时,当前终端PPID(-bash)是sshd守护程序的PID(root@pts/0),因此在当前终端下的所有进程的PPID都是-bash的PID,比如执行命令、运行脚本。

所以当在-bash下设置的变量,只在-bash进程下有效,而-bash下的子进程bash是无效的,当export后才有效。

进一步说明:再重新连接SSH,去除上面定义的变量测试下

所以在当前shell定义的变量一定要export,否则在写脚本时,会引用不到。

还需要注意的是退出终端后,所有用户定义的变量都会清除。

在/etc/profile下定义的变量就是这个原理,后面有章节会讲解Linux常用变量文件。

1.4.3 位置变量

位置变量指的是函数或脚本后跟的第n个参数。

$1-$n,需要注意的是从第10个开始要用花括号调用,例如${10}

shift可对位置变量控制,例如:

#!/bin/bash
echo "1: $1"
shift
echo "2: $2"
shift
echo "3: $3"
# bash test.sh a b c
1: a
2: c
3:

每执行一次shift命令,位置变量个数就会减一,而变量值则提前一位。shift n,可设置向前移动n位。

1.4.4 特殊变量

$0 脚本自身名字
$? 返回上一条命令是否执行成功,0为执行成功,非0则为执行失败
$# 位置参数总数
$* 所有的位置参数被看做一个字符串
$@ 每个位置参数被看做独立的字符串
$$ 当前进程PID

1.5 变量引用

1.5.1 自定义变量与引用

# VAR=123
# echo $VAR
123

Shell中所有变量引用使用$符,后跟变量名。

有时个别特殊字符会影响正常引用,那么需要使用${VAR},例如:

# VAR=123
# echo $VAR
123
# echo $VAR_   # Shell允许VAR_为变量名,所以此引用认为这是一个有效的变量名,故此返回空# echo ${VAR}
123

还有时候变量名与其他字符串紧碍着,也会误认为是整个变量:

# echo $VAR456# echo ${VAR}456
123456

1.5.2 将命令结果作为变量值

# VAR=`echo 123`
# echo $VAR
123
# VAR=$(echo 123)
# echo $VAR
123

这里的反撇号等效于$(),都是用于执行Shell命令。

博客地址:http://lizhenliang.blog.51cto.com

QQ群:323779636(Shell/Python运维开发群)

1.6 双引号和单引号

在变量赋值时,如果值有空格,Shell会把空格后面的字符串解释为命令:

# VAR=1 2 3
-bash: 2: command not found
# VAR="1 2 3"
# echo $VAR
1 2 3
# VAR='1 2 3'
# echo $VAR
1 2 3

看不出什么区别,再举个说明:

# N=3
# VAR="1 2 $N"
# echo $VAR
1 2 3
# VAR='1 2 $N'
# echo $VAR
1 2 $N

单引号是告诉Shell忽略特殊字符,而双引号则解释特殊符号原有的意义,比如$、!。

1.7 注释

Shell注释也很简单,只要在每行前面加个#号,即表示Shell忽略解释。

第一章 Shell基础知识相关推荐

  1. 第一章 计算机基础知识

    第一章 计算机基础知识 计算机是什么 在现实生活中,越来越无法离开计算机了电脑.笔记本.手机.游戏机.汽车导航.智能电视 ... 计算机就是一个用来计算的机器! 目前来讲,计算机只能根据人类的指令来完 ...

  2. 尚硅谷python核心基础教程笔记-第一章 计算机基础知识

    第一章 计算机基础知识(视频1-10) 课程介绍 课程名称:Python基础视频教程 讲师:尚硅谷教育,李立超(lichao.li@foxmail.com) 面向的层次:From Zero to He ...

  3. 第一章计算机基础知识第一节,第一章 计算机基础知识 第一节

    第一章计算机基础知识 第一节.了解计算机 尊敬的各位评委老师: 大家好!我今天说课的题目是<了解计算机>.我将从以下五方面来谈谈对这节课的设计:即说教材.学情分析.说教法和学法.说教学过程 ...

  4. 微型计算机基础 教案,第一章微型计算机基础知识新080902电子教案(153页)-原创力文档...

    第一章 微型计算机基础知识;第一章? 微型计算机基础知识;§1.1 计算机中数的表示方法;1.1.1 进位计数制及各计数制间的转换;二进制数的特点; 十进制--符合人们的习惯二进制--便于物理实现十六 ...

  5. 计算机术语new一个,微机原理第一章计算机基础知识(new)

    <微机原理第一章计算机基础知识(new)>由会员分享,可在线阅读,更多相关<微机原理第一章计算机基础知识(new)(47页珍藏版)>请在人人文库网上搜索. 1.1.第一章计算机 ...

  6. 自考第一章计算机基础知识,2018年自考计算机网络技术基础复习资料:第一章...

    第一章 计算机基础知识 电子计算机的发展阶段分为: 1 第一代电子计算机.用电子管.以构成计算机的电子器件来1946年第一台电子计算机. 2 第二代电子计算机的特点是用晶体管. 3 第三代电子计算机的 ...

  7. 计算机基础知识作业,第一章计算机基础知识作业

    第一章计算机基础知识作业 读书之法,在循序而渐进,熟读而精思 作业一计算机基础知识 一.作业目的 1.掌握 1)计算机的发展历史: 2)计算机的主要特点和应用领域: 3)计算机系统硬件组成和工作原理: ...

  8. 第一章计算机基础知识作业答案,第一章 计算机基础知识.doc第一次作业

    交流 借鉴 第一章 计算机基础知识 一.单选题 1. 第四代电子计算机是( C )计算机. A.电子管 B.晶体管 C.大规模集成电路 D.人工智能 2.第一台电子计算机是1946年在美国研制的,该机 ...

  9. 计算机基础第一章知识题库,题库第一章计算机基础知识

    题库第一章计算机基础知识 (51页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 23.9 积分 第一章 计算机基础知识一.判断正误题1.第二计算机的主存采 ...

  10. 海南大学计算机原理,海南大学微机原理课件 第一章 计算机基础知识

    第一章 计算机基础知识 数 制 §1.1 一.计算机使用的数制及其相互转换 十进制(D).二进制(B).八进制(O)和十六进制(H). 数制中用少量数码按次序排列成数位,并按由低到高的进位方式进行计 ...

最新文章

  1. sketch如何做设计稿交互_做交互设计不可不知的十大原则
  2. 遮挡目标检测优化笔记
  3. likelihood(似然) and likelihood function(似然函数)
  4. 有兴趣吗?程序员分手手册,教你如何恢复单身
  5. Idea问题:“marketplace plugins are not loaded”解决方案
  6. HYSBZ - 1588 营业额统计(Splay)
  7. linux网络流量实时监控工具之iptraf 【个人比较喜欢用的流量监控软件】
  8. Kali Linux Web 渗透测试秘籍 第四章 漏洞发现
  9. 使用qsort()和bsearch()函数对值和字符串进行排序和查找
  10. python自动化办公入门书籍-用Python自动办公,做职场高手 | 「讲文兄博客」
  11. 保定市身份证前6位代表地
  12. 名字作诗(藏头名字作诗)
  13. Win10系统如何通过备忘录的日历设定定时提醒实现日程计划和提醒
  14. 台式计算机和笔记本,大一买买笔记本还是台式电脑好?
  15. PTA 7-40 统计闰年个数
  16. 高校的论文查重系统有哪些?
  17. 3.3 计算球的体积
  18. java android rsa加密解密_Android RSA加密解密
  19. 浅谈运营商网络业务限速(上)
  20. delphi XE https接口 出错 Could not load SSL library

热门文章

  1. C++中析构函数的作用,
  2. linux中配置Java环境
  3. picker从后台取数据
  4. 关于if...else语句的小注意
  5. spark streaming之 windowDuration、slideDuration、batchDuration​
  6. android 系统相册调用,各版本的区别总结
  7. Linux C++开发小结
  8. [复习]Python基础回顾
  9. Linux设备驱动(转)
  10. YOLO V1论文理解