4-1:shell编程之编写第一个shell脚本
文章目录
- 一:什么是shell脚本
- 二:如何编写shell脚本
- (1)脚本文件的格式
- (2)可执行权限
- (3)执行脚本
- 三:第一个shell脚本
- (1)基本结构
- (2)变量和常量
- A:创建变量和常量
- B:变量和常量赋值的问题
一:什么是shell脚本
你可以这样理解:shell脚本是一个包含一系列的文件,shell会读取这个文件,最后执行相应命令。就好像这些命令是直接输入到命令行中一样
二:如何编写shell脚本
编写shell脚本必须明确三件事情
- 一个文本编辑器:shell脚本是普通文件,所以需要文本编辑器进行编辑,这个编辑最好有代码高亮,语法提示等功能
- 使脚本可执行:系统会执行你的脚本文件,所以必须要将脚本文件的权限设置为允许执行
- 将脚本放置在shell可以发现的位置
(1)脚本文件的格式
好的现在让我们编写第一个shell脚本,新建一个文件hello,该脚本文件的目的就是向屏幕输出Hello World
于是输入
#! /bin/bash
echo 'Hello World' #this is a script
就像#include
一样,#! /bin/bash
是用来告知操作系统用命令行解释器的名字,每一个shell脚本都应该以它作为第一行
(2)可执行权限
为了让该文件可以被执行,需要赋予执行权限。一般有两种,755表示每个人都可以执行,700表示只有脚本创建者可以执行
(3)执行脚本
好的现在让我们执行文件,还记得是如何执行C语言编译好的文件吗?
三:第一个shell脚本
好的,经过前面的叙述,想必大家对shell脚本应该有了一个简单的认识了吧。现在我来做一个案例,我们要编写一个报告生成器,用来显示系统的各种统计数据和状态,并以HTML的方式保存。这样每次运行这个脚本,它就能获取最新的系统状况了。
(1)基本结构
我认为HTML的基本格式大家都应该知道吧
<DOCTYPE html>5 <html>6 <head>7 <meta charset="utf-8">8 <title>TEST</title>9 </head>10 <body>11 can you see me? 12 </body>13 </html>
首先我们需要将这个html文件输出到标准输出,编写脚本如下
然后运行这段程序,并将其重定向到文件info.html
中
接着使用火狐浏览器打开这个文件,就可以看见相应的内容了
好的继续完善如下
<DOCTYPE html>5 <html>6 <head>7 <meta charset="utf-8">8 <title>System information report</title>9 </head>10 <body>11 <h1>System information report</h1> 12 </body>13 </html>
(2)变量和常量
可以发现上面我们的脚本出现了两次System information report
,类似于C语言中的宏,对于这种多次出现的如果需要修改时工作量会很大,所以我们这样做**,类似于C语言中的字符串,定义一个变量存储它,修改时只需修改变量的内容**
1 #! /bin/bash2 3 4 mytitle="System information report" //变量 5 echo "6 <DOCTYPE html>7 <html>8 <head>9 <meta charset="utf-8">10 <title>$title</title>11 </head>12 <body>13 <h1>$title</h1>14 </body>15 </html>16 "
A:创建变量和常量
不同于某些编程语言,shell遇见一个新的变量时,会自动创建这个变量。
比如在命令行中,为变量赋值为yes,然后使用$扩展进行查看
如果直接使用参数扩展查看一个没有命名的变量,那么这个变量将会被自动创建,并且被赋值为空值
这样会导致一些问题,比如下面test
和test1
两个文件,还有test
和test1
两个变量,他么分别赋值为test.txt
和test1.txt
,使用cp
命令将test
变量的值复制给test1
,如果输入正确,将达到我们的目的。但是如果故意输入错误,那么根据前面的描述,cp的第二个参数就会成为了空值
所以变量就意味着会发生变化,类似于用const修饰的变量,我们需要常量,使其值不能发生变化,发生变化就会报错
在shell中我们用大写字母表示常量,用小写字母表示变量
我们把之前的例子,修改如下,使用扩展来输出我们的主机名
1 #! /bin/bash2 3 4 MYTTILE="System information report for $HOSTNAME" //变量 5 echo "6 <DOCTYPE html>7 <html>8 <head>9 <meta charset="utf-8">10 <title>$TITLE</title>11 </head>12 <body>13 <h1>$TITLE</h1>14 </body>15 </html>16 "
B:变量和常量赋值的问题
shell并不关心的你的变量是什么类型的,因为它都会被当做字符串,但是要注意以下问题
在扩展期间,变量名称可以用花括号括起来,当变量名因为周遭环境而变得不明确时,就会非常有帮助
比如要使用变量的方式,将一个文件的名字由file改为file1
如果直接操作,会发现由于$name1会被当做新的变量名,而产生空值,所以使用花括号会解决这种歧义的问题
好的回归正题,我们加入一些其他信息
1 #! /bin/bash2 3 4 MYTTILE="System information report for $HOSTNAME" 5 TIME=$(date) 5 echo "6 <DOCTYPE html>7 <html>8 <head>9 <meta charset="utf-8">10 <title>$TITLE</title>11 </head>12 <body>13 <h1>$TITLE</h1>14 <h2>time is :$TIME</h2>14 </body>15 </html>16 "
4-1:shell编程之编写第一个shell脚本相关推荐
- vi新建一个shell脚本_编写第一个Shell脚本
Linux中有好多中不同的shell,bash是linux默认的shell,免费且容易使用. su切换为root权限 1.创建shell脚本 touch hello.sh 2.编辑: vi hello ...
- Shell编程规范与变量(shell编程规范,执行脚本文件的四种方式,管道符号与重定向,shell变量的作用于类型)
文章目录 Shell脚本概述 Shell脚本的概念 Shell的作用 Shell编程规范 重定向与管道 Shell脚本变量 自定义变量 特殊变量 Shell脚本概述 Shell Script ,She ...
- pycharm中编写shell_一个shell脚本来打开pycharm软件
---恢复内容开始--- 本人菜鸟,学到一点点东西就很高兴....... 开始学tensorflow框架,因为比较好装tensorflow,所以把电脑系统换成了ubuntu16.04,紧接着就要选用一 ...
- shell编程:对话 UNIX: 更多 shell 脚本技术
尽管在近两年使用过 UNIX 的一些人可能尝试过 shell 脚本编程,但是他们很可能只是研究操作系统的细节,并不精通 shell 脚本编程.本文针对那些希望进一步了解 shell 脚本,并开始编写更 ...
- 【Shell 编程基础第一部分】Shell脚本HelloShell及简单的Shell基础
本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/shell/759.html ☞ 点击订阅 ☜ ...
- Windows Shell编程-第七章.侵入Shell
第七章 侵入Shell 与所有其它Win32进程一样,Shell也有其自己的内存地址空间,这是其它应用完全不可知的地址空间.为了进入这个地址空间,我们必须传递一定数量的控制点,就象我们正在跨过国家边界 ...
- Linux Shell编程学习笔记一:shell简介
Q:什么是Shell,什么是shell脚本? A:Shell是一种用C语言编写的程序,它是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 Shell脚本编程,完成更加复杂的操作 ...
- Linux 命令行与shell编程 第10章 构建基本脚本
本章内容 构建基本脚本 使用多个命令 创建shell脚本文件 现在我们已经介绍了Linux系统和命令行的基础知识,可以开始编程了.本章讨论编写shell脚本的基础知识.在开始编写自己的shell脚本大 ...
- linux与shell编程指南,LINUX与UNIX SHELL编程指南
目 录 译者序 前言 第一部分 shell 第1章 文件安全与权限1 1.1 文件1 1.2 文件类型2 1.3 权限2 1.4 改变权限位4 1.4.1 符号模 ...
最新文章
- 传统数据仓库架构与Hadoop的区别
- 鸭鸭邀请------青龙毛毛
- 理解IDS的主动响应机制
- python猜单词游戏_磁盘空间不足。
- vue内引入语音播报功能
- 配置java编译环境
- 【计算机就业-银行】校招想去银行该怎么准备
- python元素分类_Python 练习 - 元素分类
- 十年,从网管到首席架构师,我的成长感悟
- IEEE论文模板(latex/word)
- ubuntu下配置nginx支持phpt(unix:/var/run/php5-fpm.sock failed (2: No such file or directory) )
- 卡卡通小熊win7桌面主题+非主流win7主题下载
- 软件安全实验——lab10(一、基于时间的侧信道攻击)
- android定位!每个程序员都必须掌握的8种数据结构!完整版开放下载
- 浏览器默认设置SameSite属性的作用
- memcached 详解
- java pdf 替换文字_itext替换pdf中的中文
- 图解WLAN网络拓补结构
- 升级iOS 15后iPhone无法连接App Store怎么办?
- c语言税务信息申报系统,四川税务网上申报系统下载
热门文章
- 薪酬最高十职位:工程师最吃香
- python中turtle介绍_python中turtle库的简单介绍
- MotifStack:多motif序列比较和可视化
- 你要知道的MacOS哪些优缺点
- jquery select css样式,css配合jquery美化 select
- php按照二维数组某个字段排序,PHP 二维数组根据某个字段排序
- python使用协程实现udp_python-socket和进程线程协程(代码展示)
- FreeRTOS | STM32H7串口中断调用FreeRTOS API,导致程序卡死
- 使用outputstream写到指定位置_MaxCompute Spark与Spark SQL对比分析及使用注意事项
- [1] SDK Tools安装