什么是shell?

Shell是一个应用程序,它连接了用户和Linux内核,让用户能够更加高效、安全、低成本地使用Linux内核,这就是Shell的本质。

shell与Linux系统关系图

shell也能够编程

  1. 有if...else选择结构,case...in 开关语句,for、while、until循环
  2. 变量、数组、字符串、注释、加减乘除、逻辑运算等概念;
  3. 函数,包含用户自定义的函数和内置函数(例如printf\export\eval等)

shell在运维中的地位

下面手链形象地展示了Shell在运维工作中的地位

先看一个简单的shell程序

#!/bin/bash
# This is to show what a example looks like. echo "This first example"
echo # This inserts an empth line in output.
echo "We are currently in the following directory"
pwd
echo
echo "This directory contains the following files"
ls

注释:

#!/bin/bash #!跟shell命令的完全路径。作用:显示后期命令以哪种shell来执行这些命令。如不指shell,以当前shell作为执行的shell

# shell 中以#开头表示,整行就被当作一个注释。执行时被忽略。

总结:

创建shell程序的步骤

第一步:创建一个包含命令和控制结构的shell文件
第二步:修改这个文件的权限使它可以执行,使用chmod u+x
第三步:执行
方法一:./{文件名}
方法二:使用决定路径 /root/../{文件名}
方法三:bash {文件名}

Shell变量

变量是shell传递数据的一种方法。变量使用来表示每个值的符号名

例:x=1

Shell 有两种变量:临时变量和永久变量。

临时变量:是shell程序内部定义的,其使用范围仅限于定义它的程序,对于其它程序不可见。

永久变量:是环境变量,其值不随shell脚本的执行结束而消失。

例:如:$PATH

# 用作运行某个命令的时候,本地查找不到某个命令或文件,会到这个声明的目录中去查找

用户定义变量:由字母或下划线打头。由字母、数字或下划线组成,并且大小写字母意义不同。变量名长度没有限制。

使用变量值时,要在变量名前加上前缀“$”。

例如:1VAR 就是非法变量。

变量赋值:赋值号“=”两边应没有空格。

例如:A=123

例如:将一个命令的执行结构赋值给变量

可以利用变量和其它字符组成一个新的字符串。

列出所有变量

set 列出所有变量

| 过滤

给变量赋值多个单词

单引号和双引号的区别

单引号之间的内容原封不动地指定给了变量,

双引号取消了空格的作用,保留特殊符号的含义

双引号:

单引号:

删除变量 unset

位置变量和特殊变量

位置变量:Shell 解释执行用户命令时,将命令行的第一个字作为命令名,而其它名字作为参数。由出现在命令行上的位置确定的参数称为位置参数。

特殊变量:有些变量是一开始执行Script脚本时就会设定,且不能被修改,但我们不叫它只读系统变量,而叫它特殊变量。这些变量当一执行程序时就有了,以下是一些特殊变量

$*:这个程序的所有参数
$#:这个程序的参数个数
$$:这个程序的PID
$!:执行上一个后台程序的PID
$?:执行上一个指令的返回值

程序例子:

#!/bin/bash
echo "$* 表示这个程序的所有参数"
echo "$# 表示这个程序的参数个数"
touch /tmp/a.txt echo "$$ 表示当前程序的ID"
touch /tmp/b.txt & echo "$! 执行上一个后台指令的PID"
echo "$$ 表示程序的进程ID"

结果:

变量的使用:

#!/bin/bash

var1="abcd efg"
echo $var1 var2=
echo "The value of var2 is $var2"
echo $HOME
echo $PATH
echo $PWD

执行结果:

shell命令(一)的更多相关文章

  1. Hadoop Shell命令大全

    hadoop支持命令行操作HDFS文件系统,并且支持shell-like命令与HDFS文件系统交互,对于大多数程序猿/媛来说,shell-like命令行操作都是比较熟悉的,其实这也是Hadoop的极大 ...

  2. Shell命令和流程控制

    Shell命令和流程控制 在shell脚本中可以使用三类命令: 1)Unix 命令: 虽然在shell脚本中可以使用任意的unix命令,但是还是由一些相对更常用的命令.这些命令通常是用来进行文件和文字 ...

  3. 在程序中执行shell命令

    在linux系统下的操作中我们会经常用到shell命令来进行,一开始学习进程的时候对于shell命令也进行了思考,认为shell命令就是一个进程的外壳,经过了后来的学习对于这一点也有了更多的认识. 用 ...

  4. Linux远程执行Shell命令或脚本

    ## 远程执行shell命令 ssh [user]@[server] '[command]' # eg. ssh root@192.168.1.1 'uptime' ## 远程执行本地shell脚本 ...

  5. HBase基本shell命令

    HBase基本shell命令 以下shell命令都是经过测试,正常展示,若有不足,还望指点! 1.创建表 create ‘表名称’,‘列族名称1’,‘列族名称1’create 'test_M_01', ...

  6. Linux SHELL 命令入门题目答案(一)

    1.如何使用shell 打印 “Hello World!” (1)如果你希望打印 !,那就不要将其放入双引号中,或者你可以通过转义字符转义(2)echo 'hello world!' 使用单引号ech ...

  7. Linux SHELL 命令入门题目(一)

    新年新气象,注重知识积累,提高手敲代码能力,而不是眼高手低,只会复制黏贴. 1.使用shell 打印 “Hello World!” 2.求变量'hello world'的字符长度 3.$0 .$SHE ...

  8. shell命令获取最新文件的名称

    最近有一个需求,在部署游戏战场服时,从程序包到部署需要做一些本地化的操作,手工操作费时费力,故写一个shell脚本,一键部署. 遇到的问题是每次要部署最新的程序包,因此需要shell命令获取最新的文件 ...

  9. 【转】Hadoop FS Shell命令

    FS Shell 调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args> 的形式. 所有的的FS shell命令使用URI路径作为参数.URI格式是scheme ...

  10. [蟒蛇菜谱] Python封装shell命令

    # -*- coding: utf-8 -*- import os import subprocess import signal import pwd import sys class MockLo ...

随机推荐

  1. vmware导入ova文件踩坑记

    问题来源 众所周知,所有的网络行为都会产生相应的网络流量,那么所有的网络攻击行为也有其对应的流量特点,那么是否能根据流量特点进而分析出其对应的是什么攻击行为呢? 我在虚拟机上使用vulnhub的靶场环 ...

  2. WSGI标准、MVC和MTC框架

    WSGI服务: wsgiref模块其实就是将整个请求信息给封装了起来,就不需要你自己处理了,假如它将所有请求信息封装成了一个叫做request的对象,那么你直接request.path就能获取到用户这 ...

  3. MyBatis框架——逆向工程

    什么是逆向工程? 逆向工程师MyBatis提供的一种自动化配置方案,针对数据表自动生成MyBatis所需的各种资源,包括实体类.Mapper接口.Mapper.xml,但是逆向工程的缺陷在于只能针对单 ...

  4. 【简说Python WEB】pyechart在flask中的应用

    个人笔记总结,可读性不高.只为自己总结用.怕日后忘记. 这里用到了tushare,pandas等python组件. pyechart的案例 c = ( Bar() .add_xaxis([" ...

  5. Ansible权威指南-读书笔记

    2 Ansible基础元素介绍 2.1 ansible 目录结构介绍 2.2 ansible 配置文件解析 配置文件解析顺序:当前命令执行目录-->用户家目录下的.ansible.cfg--&g ...

  6. word2vec 和 glove 模型的区别

    2019-09-09 15:36:13 问题描述:word2vec 和 glove 这两个生成 word embedding 的算法有什么区别. 问题求解: GloVe (global vectors ...

  7. stm32CubeMx+TrueSTUDIO+uc/os-III移植开发(一)

    自从接触到stm32cubemx后,发现使用起来很方便,用来做项目开发的话,由于是图形化操作界面,工作效率比较快.如果要学习操作系统,以前的IDE如keil,IAR等IDE对操作系统的代码调试起来不够 ...

  8. 调试 node.js 程序

    调试 node.js 程序 在程序开发中,如何快速的查找定位问题是一项非常重要的基本功.在实际开发过程中,或多或少都会遇到程序出现问题导致无法正常运行的情况,因此,调试代码就变成了一项无法避免的工作. ...

  9. coding++:Spring_IOC(控制反转)详解

    IoC是什么: 1):Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想. 2):在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的 ...

  10. shell大全

    1.shell判断文件是否存在 http://www.cnblogs.com/sunyubo/archive/2011/10/17/2282047.html