第16篇 Shell脚本基础(一)
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脚本基础(一)的更多相关文章
- Linux基础篇–shell脚本编程基础
本章内容概要 编程基础 脚本基本格式 变量 运算 条件测试 配置用户环境 7.1 编程基础程序:指令+数据程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心 ...
- Linux shell脚本基础学习详细介绍(完整版)二
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- Shell脚本基础学习
Shell脚本基础学习 当你在类Unix机器上编程时, 或者参与大型项目如k8s等, 某些框架和软件的安装都是使用shell脚本写的. 学会基本的shell脚本使用, 让你走上人生巅峰, 才怪. 学会 ...
- 什么是Shell?Shell脚本基础知识详细介绍
这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 ...
- 详细介绍Linux shell脚本基础学习
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- shell脚本-基础
shell脚本-基础 编程基础 程序是指令+ 数据 程序编程风格: 过程式:以指令为中心,数据服务于指令 对象式:以数据为中心,指令服务于数据 shell 程序提供了编程能力,解释执行. 计算运行二进 ...
- 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 ...
- shell脚本基础知识
虽然现在能在Linux系统下生存,但是自觉效率太低,和高手有很大的差距. 这就是关于Linux的知识太过匮乏,有很多事情知道该怎么做,但是就是没法在Linux下实现,为了提升工作效率,必须要接触Lin ...
随机推荐
- 配置阿里云maven中央库
<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorOf> ...
- Kruskal算法-最小生成树
2017-07-26 10:32:07 writer:pprp Kruskal算法是根据边的加权值以递增的方式,一次找出加权值最低的边来建最小生成树:并且每次添加的边不能造成生成树有回路,直到找到N ...
- Activity启动的四种方式
Activity启动方式有四种,分别是: standardsingleTopsingleTasksingleInstance 可以根据实际的需求为Activity设置对应的启动模式,从而可以避免创建大 ...
- 使用display:table使两栏布局高度相等
两栏布局大家应该经常用了,但是遇到坑爹的要两栏的高度对齐的话要怎么办呢? <!DOCTYPE html> <html> <head> <meta charse ...
- Android并发编程之白话文详解Future,FutureTask和Callable
从最简单的说起Thread和Runnable 说到并发编程,就一定是多个线程并发执行任务.那么并发编程的基础是什么呢?没错那就是Thread了.一个Thread可以执行一个Runnable类型的对象. ...
- BZOJ 4445 [Scoi2015]小凸想跑步:半平面交
传送门 题意 小凸晚上喜欢到操场跑步,今天他跑完两圈之后,他玩起了这样一个游戏. 操场是个凸 $ n $ 边形,$ n $ 个顶点 $ P_i $ 按照逆时针从 $ 0 $ 至 $ n-1 $ 编号. ...
- CAD安装激活失败的原因
1.如何激活的流程我就不赘述了,直奔主题!当出现“未激活”界面时,点击激活,跳出如图所示的窗口.复制“申请号”. 2.“以管理员身份运行”CAD注册机(示例的注册机是CAD2013 32位).这就是注 ...
- urllib2打开URL(含中文)的问题
import urllib2 url = u"http://www.baidu.com/wd=测试" urllib2.urlopen(url.encode('utf-8')).re ...
- mysql-debug: Thread stack overrun
bug info 报错信息: java.sql.SQLException: Thread stack overrun: 5456 bytes used of a 131072 byte stack, ...
- 关于 SimpleDateFormat 的非线程安全问题及其解决方案
一直以来都是直接用SimpleDateFormat开发的,没想着考虑线程安全的问题,特记录下来(摘抄的): 1.问题: 先来看一段可能引起错误的代码: package test.date; impor ...