第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 ...
随机推荐
- 关于iOS开发的学习
关于iOS开发的学习,打个比方就像把汽车分解: 最底层的原料有塑料,钢铁 再用这些底层的东西造出来发动机,座椅 最后再加上写螺丝,胶水等,把汽车就拼起来了 iOS基本都是英文的资料, ...
- Java多线程 - 线程组
Java使用ThreadGroup来表示线程组,用以对一批线程进行分类管理. Java允许程序对线程组直接进行控制,对线程组的控制相当于同时控制这批线程: 用户创建的所有线程都属于指定线程组,如果程序 ...
- Kubernetes源码之旅:从kubectl到API Server
概述: Kubernetes项目目前依然延续着之前爆炸式的扩张.急需能够理解Kubernetes原理并且贡献代码的软件开发者.学习Kubernetes源码并不容易.Kubernetes是使用相对年轻的 ...
- MySQL主从配置实现
//////////////////////MySQL主从配置//////////////////////////// 首先,两边都要安装MySQL,启动两边的MySQL 接着,配置主从,要保证主从数 ...
- LeetCode第[55]题(Java):Jump Game
题目:跳跳游戏 难度:Medium 题目内容: Given an array of non-negative integers, you are initially positioned at the ...
- 源码安装LNMP与搭建Zabbix
系统环境:CentOS release 6.5 (Final) 搭建Zabbix 3.0对PHP环境要求>= 5.4 一.下载NMP的软件包: N:wget http://nginx.org/d ...
- HTML5笔记学习(canvas)
来源于<HTML5高级程序设计> css3圆角 border-radius旋转变换 transform:rotate(); 变换 transformation动画 animation过度 ...
- 【Python那些事儿之十】range()和xrange()
by Harrison Feng in Python 无论是range()还是xrange()都是Python里的内置函数.这个两个内置函数最常用在for循环中.例如: >>> fo ...
- 【C#基本功】1》panel的C#用法 panel
上面截图是panel在labview中的用法,在labview中panel加动态调用技术可以解决很多难题. 对于刚刚接触C#的我来说,如何实现pannel动态加载界面,也是一个必须首要克服的难点. 经 ...
- 用 LoadLibraryExW 函数测试加载 dll (CSharp、Windows)
效果如下: $ llbtest "E:\Developer\emgucv-windesktop 3.3.0.2824\libs\x64" LoadLibraryExW PATH: ...