有关Linux中的bash编程讲解

发布时间 - 2017-07-19 00:00:00    点击率:

为何叫做shell?
在介绍 shell 是什么东西之前,不妨让我们重新审视使用者与电脑的关系。我们知道电脑的运作不能离开硬件,但使用者却无法直接对硬件作驱动,硬件的驱动只能透过一个称为“操作系统(operating system)”的软件来控管,事实上,我们每天所谈的linux,严格来说只是一个操作系统,我们称之为“核心(kernel)”。然而,从使用者的角度来说,使用者也没办法直接操作kernel,而是透过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。
这也正是kernel跟shell的形像命名关系。

从技术角度来说,shell是一个使用者与系统的互动界面(interface),主要是让使用者透过命令行(command line)来使用系统以完成工作。因此,shell的最简单的定义就是---命令解释器(Command Interpreter):

将使用者的命令翻译给核心处理,

同时,将核心处理结果翻译给使用者。

每次当我们完成系统登入(log in),我们就取得一个互动模式的shell,也称为login shell或primary shell。若从行程(process)角度来说,我们在shell所下达的命令,均是shell所产生的子行程。这现像,我们暂可称之为fork。如果是执行脚本(shell script)的话,脚本中的命令则是由另外一个非互动模式的子shell(sub shell)来执行的。也就是primary shell产生sub shell的行程,sub shell再产生script中所有命令的行程。(关于行程,我们日后有机会再补充。)

这里,我们必须知道:kernel与shell是不同的两套软件,而且都是可以被替换的:

不同的操作系统使用不同的kernel,

而在同一个kernel之上,也可使用不同的shell。

bash编程也叫shell编程

预定义变量        $? 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确的执行;如果这个变量返回的值非0(具体是那个数,有命令自己来决定),则证明上一个命令执行不正确。        $$当前进程的进程号(PID)        $!后台运行的最后一个进程的进程号(PID)  运算符        declare 声名变量的类型           declare [+/-][选项] 变量名        - 给变量设定类型属性        + 取消变量的类型属性        -i 将变量声名为整数型        -x将变量什申明为环境变量        -p 显示指定变量的被声名的类型

举例:

a=1b=2declare -i c = $a+$b c=$(($a+$b))

注意用双小括号,因为Linux中认为一切皆为字符。

如果不加()当成一个命令,shell脚本中Linux命令在 $() 中运行,当然可以直接写命令,如果则一些引用命令时 就要 $()

单分支if  条件语句

if [ 条件判断式 ];then程序
fior  if [ 条件判断式 ]then程序
fi

判断登录用户是否为root用户:

#!/bin/bash

#grep 获取行通配符
#cut 获取列统配符,以 = 分割 2 获取第二列
login_name=$(env | grep LOGNAME | cut -d "=" -f 2)
#echo $login_nameif [ "$login_name" != "root" ]thenecho 'isnot root'fi

判断根分区的占用率

#!/bin/bash
#df -h 任性话显示磁盘的利用率
#awk 获取第五列
#cut 对字符用 % 进行分割 获取第一列值
result=$( df -h | grep sda1 | awk '{print  $5}'  | cut -d % -f 1)if [ "$result" -lt '90' ]thenecho 'the root dir  is not full'fi

双分支if条件语句

if [ 条件判断式 ]then ...else...
fi

判断nginx 是否在运行 (最好不用包含nginx作为文件名)

#!/bin/bash
result=$(ps aux | grep nginx | grep -v grep)if [ -n "$result" ]thenecho "$(date) nginx is ok !"elseecho "$(date) nginx is not ok !"

                sudo /etc/init.d/nginx start &>/dev/nullecho "$(date) restart nginx !!"
fi

多分支if语句

if []then elif []then...else 
   ...if


# linux  # 互动  # 操作系统  # 称之为  # 都是  # 是一个  # 让我们  # 也没  # 则是  # 而在  # 也可 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 使用spring连接及操作mongodb3.0实例  原生JS获取元素集合的子元素宽度实例  JavaScript实现Fly Bird小游戏  如何批量查询域名的建站时间记录?  如何快速搭建自助建站会员专属系统?  laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法  如何在VPS电脑上快速搭建网站?  Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  Laravel如何处理和验证JSON类型的数据库字段  如何快速搭建高效香港服务器网站?  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  Laravel集合Collection怎么用_Laravel集合常用函数详解  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何在云主机上快速搭建网站?  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  如何快速搭建高效可靠的建站解决方案?  网站图片在线制作软件,怎么在图片上做链接?  教学论文网站制作软件有哪些,写论文用什么软件 ?  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  javascript中对象的定义、使用以及对象和原型链操作小结  如何用PHP快速搭建CMS系统?  Laravel如何实现文件上传和存储?(本地与S3配置)  深入理解Android中的xmlns:tools属性  网易LOFTER官网链接 老福特网页版登录地址  如何在万网ECS上快速搭建专属网站?  Android滚轮选择时间控件使用详解  如何在Windows服务器上快速搭建网站?  使用C语言编写圣诞表白程序  Linux系统命令中tree命令详解  如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  高防服务器:AI智能防御DDoS攻击与数据安全保障  如何注册花生壳免费域名并搭建个人网站?  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  手机网站制作与建设方案,手机网站如何建设?  Laravel如何从数据库删除数据_Laravel destroy和delete方法区别  lovemo网页版地址 lovemo官网手机登录  Laravel如何与Inertia.js和Vue/React构建现代单页应用  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  如何在新浪SAE免费搭建个人博客?  Laravel如何实现API版本控制_Laravel版本化API设计方案  如何在景安服务器上快速搭建个人网站?  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲