SHELL编程入门简介
一、SHELL软件概念和应用场景
1) 学习Linux技术,不是为了学习系统安装、命令操作、用户权限、配置IP、网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件、程序(Apache、MYSQL、Redis、PHP、Nginx、Tomcat等);
2) 学习Linux技术,如果不懂SHELL编程,可以说不懂Linux,要想实现月薪过万,SHELL编程技能是运维人员必备的,那么SHELL编程到底是什么呢?
3) 通过Xshell和CRT远程连接Linux操作系统,默认会登陆到命令行终端,命令行终端提示符#、$,为什么要登陆命令行呢?其实可以直接登陆图形界面,最终用户是为了什么?为了能够控制和管理操作系统。
4) 而Linux操作系统核心是Linux内核(数以万计的代码组成的),默认用户是不能直接操作Linux内核的,借助第三方的工具:命令行、图形界面UI,默认登陆到Linux命令行终端,也称为SHELL命令行终端;
5) 用户基于SHELL命令行终端,可以输入各种Linux指令,当我们在SHELL命令行终端输入df –h命令按下Enter键时,Linux指令传递给SHELL(软件程序),经过SHELL解析,并且将解析之后内容传递给Linux内核,Linux内核接收以后会处理,处理完毕之后会将数据内容返回给SHELL,由SHELL经过解析最
终返回给用户终端;
6) 通常将SHELL称为Linux内核的外壳,用于连接用户和Linux内核之间桥梁,将SHELL称为中间件,SHELL外壳程序有很多种类和版本,查看Linux操作系统SHELL类型和SHELL版本:
#查看Linux默认的SHELL种类;
echo $SHELL
#查看默认的SHELL种类版本;
/bin/bash --version
7) SHELL和SHELL编程概念有什么区别呢?
- SHELL和SHELL编程是两个不同的概念,SHELL是用户和Linux内核之间沟通桥梁,而SHELL编程主要是基于SHELL解释器去编写各种指令或者代码;
- SHELL编程一定要有SHELL(SHELL解释器),SHELL解释器是SHELL编程的基石,没有SHELL就没有SHELL编程;
8) SHELL编程的核心思想?
SHELL编程是将Linux单个指令或者多个指令按照一定的逻辑关系和顺序堆积在文本文件(脚本文件)中,文本文件中的指令会通过SHELL解释器去解析,最终实现某个具体的功能和需求;
9) SHELL编程的产物是SHELL脚本文件(以.sh结尾命名的),而SHELL脚本文件是由单个命令或者多个命令堆积而成的,SHELL脚本中命令会通过SHELL解释器去解析和执行;
10) SHELL编程的意义和用途?
- 可以将手工重复的操作写入脚本文件,下次操作变得简单、快捷;
- 可以将繁杂的工作任务变成简单化、自动化的操作流程;
- 可以减轻运维人的工作量,提高运维人员的工作效率;
- 可以加快企业自动化运维的进程和脚步;
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
- 不同的Shell语言的语法有所不同,一般不能交换使用,最常用的shell是Bash,也就是Bourne Again Shell。Bash由于易用和免费,在日常工作中被广泛使用,也是大多数Linux操作系统默认的Shell环境。
- Shell、Shell编程、Shell脚本、Shell命令之前都有什么区别呢?简单来说Shell是一个整体的概念,Shell编程与Shell脚本统称为Shell编程,Shell命令是Shell编程底层具体的语句和实现方法。
二、SHELL脚本及Hello World
要熟练掌握Shell编程语言,需要大量的练习,初学者可以用Shell打印“Hello World”字符,寓意着开始新的启程!
- Shell脚本名称命名一般为英文、大写、小写;
- 不能使用特殊符号、空格来命名;
- Shell脚本后缀以.sh结尾;
- 不建议Shell命名为纯数字,一般以脚本功能命名。
- Shell脚本内容首行需以#!/bin/bash开头;
- Shell脚本中变量名称尽量使用大写字母,字母间不能使用“-”,可以使用“_”;
- Shell脚本变量名称不能以数字、特殊符号开头。
- #!/bin/bash
- #This is my First shell
- #By author jfedu.net 2017
- echo “ Hello World ”
- #!/bin/bash # 固定格式,定义该脚本所使用的Shell类型;
- #This is my First shell #号表示注释,没有任何的意义,SHELL不会解析它;
- #By author jfedu.net 2017 #表示脚本创建人,#号表示注解;
- echo “Hello World !” #Shell脚本主命令,执行该脚本呈现的内容。
- 1、Shell脚本编写完毕,如果运行该脚本,运行用户需要有执行权限,可以使用chmod o+x first_shell.sh赋予可执行权限。
- 2、然后./first_shell.sh执行即可,还可以直接使用命令执行: /bin/sh first_shell.sh直接运行脚本,不需要执行权限,最终脚本执行显示效果一样。
- 3、初学者学习Shell编程,可以将在Shell终端运行的各种命令依次写入到脚本内容中,可以把Shell脚本当成是Shell命令的堆积。
三、Shell编程之变量详解
Shell编程是非类型的解释型语言,不像C++、JAVA语言编程时需要事先声明变量,Shell给一个变量赋值,实际上就是定义了变量,在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值,Shell变量为弱类型,定义变量不需要声明类型,但在使用时需要明确变量的类型,可以使用Declare指定类型,Declare常见参数有:
- +/- "-"可用来指定变量的属性,"+"为取消变量所设的属性;
- -f 仅显示函数;
- r 将变量设置为只读;
- x 指定的变量会成为环境变量,可供shell以外的程序来使用;
- i 指定类型为数值,字符串或运算式。
Shell编程中变量分为三种,分别是系统变量、环境变量和用户变量,其中系统变量在对参数判断和命令返回值判断时使用,而环境变量则主要是在程序运行时需要设置,用户变量又称为局部变量,多使用在Shell脚本内部或者临时局部使用。
- #!/bin/bash
- #By author jfedu.net 2017
- A=123
- echo “Printf variables is $A.”
- 执行该Shell脚本,结果将会显示:Printf variables is jfedu.net。Shell常见的系统变量、环境变量、用户变量详解如下:
- 1)SHELL编程常见系统变量
- $0 当前脚本的名称;
- $n 当前脚本的第n个参数,n=1,2,…9;
- $* 当前脚本的所有参数(不包括程序本身);
- $# 当前脚本的参数个数(不包括程序本身);
- $? 命令或程序执行完后的状态,返回0表示执行成功;
- $$ 程序本身的PID号。
- 2)SHELL编程常见环境变量
- PATH 命令所示路径,以冒号为分割;
- HOME 打印用户家目录;
- SHELL 显示当前Shell类型;
- USER 打印当前用户名;
- ID 打印当前用户id信息;
- PWD 显示当前所在路径;
- TERM 打印当前终端类型;
- HOSTNAME 显示当前主机名。
- 3)SHELL编程用户变量
- A=jfedu.net 自定义变量A;
- N_SOFT=nginx-1.12.0.tar.gz 自定义变量N_SOFT;
- BACK_DIR=/data/backup/ 自定义变量BACK_DIR;
- IP1=192.168.1.11 自定义变量IP1;
- IP2=192.168.1.12 自定义变量IP2。
- 创建Echo打印菜单Shell脚本,脚本代码如下:
- #!/bin/bash
- #auto install httpd
- #By author jfedu.net 2017
- echo -e '\033[32m-----------------------------\033[0m'
- FILE=httpd-2.2.31.tar.bz2
- URL=http://mirrors.cnnic.cn/apache/httpd/
- PREFIX=/usr/local/apache2/
- echo -e "\033[36mPlease Select Install Menu:\033[0m"
- echo
- echo "1)官方下载Httpd文件包."
- echo "2)解压apache源码包."
- echo "3)编译安装Httpd服务器."
- echo "4)启动HTTPD服务器."
- echo -e '\033[32m-----------------------------\033[0m'
- sleep 20
SHELL编程入门简介的更多相关文章
- Linux下的shell编程入门
通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应.一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率.要达到这样的目的,通常我们利用shell程序或者 ...
- Linux Shell编程入门
从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操 ...
- 转:Linux Shell编程入门
http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来 ...
- 转inux Shell编程入门
http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来 ...
- Shell编程入门基础上
前言 为什么学 Shell Shell 脚本语言是实现 Linux/UNIX 系统管理及自动化运维所必备的重要工具, Linux/UNIX 系统的底层及基础应用软件的核心大都涉及 Shell 脚本的内 ...
- [转]Linux Shell编程入门
转自:http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的 ...
- shell 编程 && bash 简介(shell 变量、shell操作环境、数据流重导向、管线命令、shell script)
如何学习一门编程语言 数据类型 运算符 关键字 1 认识BASH 这个shell linux是操作系统核心,用户通过shell与核心进行沟通,达到我们想要的目的.硬件.核心.用户之间的关系: 原理:所 ...
- Linux简介及常用命令使用5--linux shell编程入门
生成 测试数据的shell脚本 Vim data_create.sh rm -rf ./data.txttouch data.txtfor((i=0;i<2000;i++))dostr=',na ...
- shell编程入门
背景知识 Shell 是用户与内核进行交互操作的一种接口,是 Linux 最重要的软件之一.目前最流行的 Shell 称为 bash Shell,bash Shell 脚本编程以其简洁.高效而著称,多 ...
随机推荐
- httpclient几种请求方式
一.httpclient 模拟get请求,并获取cookie信息 public class MyCookiesForGet { private String url; //用来读取.propertie ...
- CF1397-C. Multiples of Length
CF1397-C. Multiples of Length 题意: 给出一个长度为\(n\)的序列,让你进行下面操作三次使得整个序列全部变为\(0\): 在序列中选中一段序列\((l, r)\), ...
- [Python] Uvicorn+FastAPI快速搞定Restful API开发
目录 安装模块 运行代码 运行命令 快速文档 安装模块 # 一个现代的,快速(高性能)python web框架 pip install fastapi # 主要用于加载和提供应用程序的服务器. pip ...
- Explain 索引优化分析
Explain 语法 # 语法 explain + DQL语句 mysql> explain select * from city where countrycode ='CHN' or cou ...
- 常用SQL语句1-增删改查
一.名词解释 RDBMS 即关系数据库管理系统(Relational Database Management System)的特点: 1.数据以表格的形式出现 2.每行为各种记录名称 3.每列为记录名 ...
- JavaScript 的 7 种设计模式
原文地址:Understanding Design Patterns in JavaScript 原文作者:Sukhjinder Arora 译者:HelloGitHub-Robert 当启动一个新的 ...
- cocos2d-x & cocos2d-js
cocos2d-x & cocos2d-js cocos2d-x new https://github.com/cocos2d/cocos2d-x cocos2d-x is a multi-p ...
- ES6 Arrow Function All In One
ES6 Arrow Function All In One this const log = console.log; const arrow_func = (args) => log(`arg ...
- TypeScript 面试题汇总(2020 版)
TypeScript 面试题汇总(2020 版) TypeScript 3.9 https://www.typescriptlang.org/zh/ TypeScript 4.0 RC https:/ ...
- where is the storage location of the browser's HTTP cache? disk or memory
where is the storage location of the browser's HTTP cache? disk or memory HTTP cache & storage l ...