shell脚本

三十八、SHELL编程

久未见 提交于 2020-03-09 13:29:13
1、介绍 SHELL是基于C语言开发的软件程序,默认是置于Linux内核的外层,Linux系统启动之后,会在Linux内核外层,装载一层外壳,这个外壳称为SHELL。SHELL外壳程序是位于用户使用者和Linux内核之间的,主要是用于接收用户输入的指令,并且解析命令,最终将解析之后的指令发给Linux内核,Linux内核处理完成之后,会将处理的结果返回给SHELL,SHELL会对Linux内核返回数据做解释(翻译),最终将翻译之后的信息返回给用户。Linux操作系统启动之后,使用用户和密码登录,默认会登录到SHELL终端上,用户所有的操作都是在SHELL终端来执行。 常见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) 2、变量 Shell编程是非类型的解释型语言,不像C++、JAVA语言编程时需要事先声明变量。Shell给一个变量赋值,实际上就是定义了变量。在Linux支持的所有shell中,都可以用赋值符号(=)为变量赋值。Shell变量为弱类型,定义变量不需要声明类型,但在使用时需要明确变量的类型。可以使用Declare指定类型

Day4 vim编辑器和shell命令脚本

让人想犯罪 __ 提交于 2020-03-09 11:57:01
vim文本编辑器三种模式 配置hostname 命令:vim /etc/hostname 配置网卡 a/ 配置文件的路径:/etc/sysconfig/network-scripts/ 网卡文件ifcfg-eno***** 命令如下:vim /etc/sysconfig/network-scripts/ifcfg-eno16780032 配置YUM a/ 配置文件路径:/etc/yum.repos.d b/ yum文件命名注意后缀必须是:'.repo'例如:rhel7.repo 来源: 51CTO 作者: 397332760 链接: https://blog.51cto.com/11395441/2476461

容器内init进程方案

白昼怎懂夜的黑 提交于 2020-03-08 23:54:18
进程标识符 (PID) 是Linux 内核为每个进程提供的唯一标识符。熟悉docker的同学都知道, 所有的进程 PID都属于某一个PID namespaces, 也就是说容器具有一组自己的 PID,这些 PID 映射到主机系统上的 PID。启动Linux内核时启动的第一个进程具有 PID 1,一般来说该进程就是 init 进程,例如 systemd 或 SysV。同样,在容器中启动的第一个进程也会获得该PID namespaces内的 PID 1。Docker 和 Kubernetes 使用信号与容器内的进程通信,来终止容器的运行, 只能向容器内 PID 1 的进程发送信号。 在容器的环境中,PID 和 Linux 信号会产生两个需要考虑的问题。 问题 1:Linux 内核如何处理信号 对于具有 PID 1 的进程,Linux 内核处理信号的方式与其他进程有所不同。系统不会自动为此进程注册信号处理函数,SIGTERM 或 SIGINT 等信号默认被忽略,必须使用 SIGKILL 来终止进程。使用 SIGKILL 可能会导致应用程序无法平滑退出,例如正在写入的数据出现不一致或正在处理的请求异常结束。 问题 2:经典 init 系统如何处理孤立进程 宿主机上的init进程(如 systemd)也用来回收孤儿进程。孤儿进程(其父级已结束的进程)会重新附加到 PID 1 的进程,PID

Linux学习7之Shell基础--Shell概述和命令执行方式

China☆狼群 提交于 2020-03-08 07:57:42
一、Shell概述   1.什么是Shell     Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动、挂起、停止甚至编写一下程序。shell最主要的功能是把我们键入的命令翻译成Linux内核能够识别的01机器语言,以便Linux内核按照我们的要求调用硬件来完成我们的操作。同时,shell会把执行结果翻译成我们能够识别的语言呈现出来。一般来说,shell就是Linux的交互界面。     shell还是一个功能强大的编程语言。其易编写、易调试,灵活性较强。shell是解释执行的脚本语言,即不需要先单独进行编译,而是在命令的执行过程中来自动进行编译,所见即所得。在shell中可以直接调用Linux系统命令。   2.shell的分类     Bourne Shell:最早的Shell,主文件名为sh。     C Shell:主要用在BSD版的Unix系统中,语法与C语言相似。     shell的两种主要语法类型有Bourne 和C,且彼此不兼容。Bourne 家族主要包括sh、ksh、Bash、psh、zsh;C家族包括:csh、tcsh。Linux系统的标准shell为Bash。Bash与sh兼容。   3.查看Linux支持的shell     可以查看/etc/shells

Shell数组追加元素的技巧

你。 提交于 2020-03-08 06:53:37
在shell中,数组是没有追加函数去实现给数组添加新元素的,我们可以利用数组的长度来添加新元素。 一、举个例子: 1.定义一个空数组变量a a=() 2.现在数组变量a的值是空的,添加一个新元素b 方法:数组变量[数组变量长度]=需要添加的元素 数组变量长度= ${#变量名[*]} a[${#a[*]}] =b #添加完毕 3.查看数组变量的值: echo ${a[*]} #输出b 二、应用在脚本的实例: 条件: 1.定义一个变量str=x_y_z 2.将变量str的值中的x,y,z添加到空数组变量arr中 代码如下: #!/bin/bash ## 定义变量 str = "x_y_z" ## 定义空数组 arr = ( ) ## 将str变量拆开分别添加到数组变量arr line = ( $( echo $ { str } | sed 's/_/ /g' ) ) for i in ${line[*]} do arr [ ${#arr[*]} ] = ${i} done echo 数组变量arr的值为: " ${arr[*]} " 脚本输出结果为: 数组变量arr的值为:x y z 来源: CSDN 作者: 绮梦寒宵 链接: https://blog.csdn.net/weixin_44901564/article/details/104552834

MongoDB入门三:MongoDB shell

陌路散爱 提交于 2020-03-08 03:05:41
MongoDB shell MongDB shell是一个功能完备的Javascript解释器,可以运行Javascript程序。也可以用于连接MongoDB服务器,执行脚本,对数据库进行操作。类似于SQL Server的管理工具SSMS。 可以通过以下2条命令打开shell控制台: > cd C:\Program Files\MongoDB 2.6 Standard\bin > mongo 如图所示: C:\Program Files\MongoDB 2.6 Standard 是MongoDB的安装目录。 在打开shell控制台之前请确保MongoDB服务已启动,如何启动MongoDB可以参考 MongoDB入门一:安装与配置 。 MongoDB shell基本操作 1.添加 > db.blog.insert({"title":"aaa","content":"123","date":new Date()}) 添加一条数据使用insert方法,MongoDB会隐式地创建集合blog。如果添加的文档比较复杂,也可以先声明再添加,例如: > post = {"title":"aaa", "content":"123", "author":"Ming Li", "summary":"This article focuses on Asp.net MVC.", "date":new

Shell脚本一键部署LAMP

走远了吗. 提交于 2020-03-08 02:36:41
Shell代码 #!/bin/sh #检查一下liunx系统 if grep -Eqii "CentOS" /etc/issue || grep -Eq "CentOS" /etc/*-release; then DISTRO='CentOS' fi version=$(/usr/bin/lsb_release -a |grep Description |awk -F : '{print $2}' |sed 's/^[ \t]*//g'|sed -r 's/.* ([0-9]+[.][0-9]+)\..*/\1/') if [ $DISTRO != CentOS ] || [ "${version}" != 7.4 ];then echo "========================该脚本只适合 Linux Centos7.4 ================================="; exit 1 fi #检测安装环境 if [ $UID -ne 0 ];then echo "========================请以超级管理员身份运行该脚本================================="; exit 1 fi if [ ! `rpm -qa yum` ];then echo "===========================

Jshell 工具的介绍

故事扮演 提交于 2020-03-07 21:57:33
Jshell shell是脚本程序的含义,为了方便代码开发,都会提供有shell的交互式编程环境。 提供shell指令可以直接运行,jdk1.9以后才有的功能   可以在jshell程序之中进行程序编写,也可以将一些内容交由程序保存    只需编写核心结构代码即可,减少了对结构化的需求/exit,交互式环境的推出    有时可以用来验证一些函数比较方便 来源: https://www.cnblogs.com/shitulaoma/p/12437346.html

SHELL脚本if语句

大城市里の小女人 提交于 2020-03-07 20:11:10
一:条件测试 1. 语法: test 条件表达式 或 [ 条件表达式 ] 2.文件测试: -d:测试是否为目录 -f:测试是否为文件 -e:测试目录或文件是否存在 -r:测试当前用户是否有读取权 -w:测试当前用户是否有写入权限 -x:测试当前用户是否有执行权限 例:测试/etc/hosts文件是否存在.如图 2.数值比较: -eq:相等 -ne:不相同 -le:小于等于 -ge:大于等于 -gt:大于 -lt:小于 例:如图 4.字符串比较: =:第一个字符串和第二个字符串相等 !=:第一个字符串和第二个字符串不相等 -z:检查字符串是否为空 例:如图 5.逻辑测试: &&:逻辑与,表示前后2个条件都成立时,测试命令返回值为0(结果成立) ||:逻辑或的意思,表示前后2个条件有其中一个满足条件时,测试命令返回值为0(结果成立) !:逻辑否,当条件不成立时,测试命令返回值为0(结果成立) 例如图: 二:if条件语句 1.单分支if语句:只在"条件成立"才执行相应的代码操作,否则不做任何操作. 语法: if 条件测试操作 then 命令序列 fi 例如:编写个脚本,测试系统中是否有/media/cdrom这个目录,如果没有则创建. 脚本如下: #!/bin/bash mulu="/media/cdrom" if [ ! -d $mulu ] ; then mkdir -p $mulu

编写Shell脚本的最佳实践

强颜欢笑 提交于 2020-03-07 13:08:19
  前言   由于工作需要,最近重新开始拾掇shell脚本。虽然绝大部分命令自己平时也经常使用,但是在写成脚本的时候总觉得写的很难看。而且当我在看其他人写的脚本的时候,总觉得难以阅读。毕竟shell脚本这个东西不算是正经的编程语言,他更像是一个工具,用来杂糅不同的程序供我们调用。因此很多人在写的时候也是想到哪里写到哪里,基本上都像是一段超长的main函数,不忍直视。同时,由于历史原因,shell有很多不同的版本,而且也有很多有相同功能的命令需要我们进行取舍,以至于代码的规范很难统一。   考虑到上面的这些原因,我查阅了一些相关的文档,发现这些问题其实很多人都考虑过,而且也形成了一些不错的文章,但是还是有点零散。因此我就在这里把这些文章稍微整理了一下,作为以后我自己写脚本的技术规范。   代码风格规范   开头有“蛇棒”   所谓shebang其实就是在很多脚本的第一行出现的以”#!”开头的注释,他指明了当我们没有指定解释器的时候默认的解释器,一般可能是下面这样: #!/bin/bash   当然,解释器有很多种,除了bash之外,我们可以用下面的命令查看本机支持的解释器: $ cat /etc/shells #/etc/shells: valid login shells /bin/sh /bin/dash /bin/bash /bin/rbash /usr/bin/screen