第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 ...
随机推荐
- eclipse里启动rabbitmq报错 java.net.SocketException: Connection reset
RabbitMQ学习之Java客户端连接测试(二) https://blog.csdn.net/roc1029/article/details/51249412 使用guest用户远程连接Rabbit ...
- scrapy框架解读--深入理解爬虫原理
scrapy框架结构图: 组成部分介绍: Scrapy Engine: 负责组件之间数据的流转,当某个动作发生时触发事件 Scheduler: 接收requests,并把他们入队,以便后续的调度 Do ...
- yii2: oralce中文,有的汉字是2个字节,有的汉字是3个字节
yii2: oralce中文,有的汉字是2个字节,有的汉字是3个字节 请用mb_substr转成1个英文字节
- shell awk使用(转)
#####awk " 对每一行操作的代码块" 操作的文件 awk -F: '{print $1,$2,$3,$4,$5}' helloworld.sh 打印字段 ...
- cvFindContours函数
cvFindContours函数: int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour, in ...
- N!含有多少个 2/5质因子
编程之美127页,N!中含有质因数2的个数 = [N/2] + [N/4] + [N/8] + [N/16] + ..... 要理解上式,先看 编程之美126页,N!中含有质因数5的个数Z 举例:N ...
- 【zzulioj-2115】乘积最大(区间dp)
题目描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...
- H5 项目问题总结
//一.HTML页面结构 <meta name="viewport" content="width=device-width,initial-scale=1.0,m ...
- delete和truncate区别
相同之处:truncate在功能上与不带WHERE子句的delete 语句相同:二者均删除表中的全部行.小心使用truncate,删除后就没有了 1.delete : 删除"表格记录&quo ...
- js 下获取子元素的方法
笔记核心: firstElementChild只会获取元素节点对象,从名称就可以看出来,firstChild则可以获取文本节点对象(当然也可以获取元素节点对象),比如空格和换行都被当做文本节点. js ...