Linux的shell编程

1、什么是shell?

当一个用户登录Linux系统之后,系统初始化程序init就为每个用户执行一个称为shell(外壳)的程序。

shell就是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便执行程序的界面系统级程序,用户能够用shell来启动、挂起、停止甚至是编写一些程序。一般的Linux系统都将bash作为默认的shell。





2、几种流行的shell

眼下流行的shell有ash、bash、ksh、csh、zsh等,能够用以下的命令来查看shell的类型:

echo $SHELL

SHELL是一个环境变量,它记录用户所使用的shell类型。





3、假设要运行该脚本,还必须使其可运行。

   chmod +x filename 

然后。您能够通过输入: ./filename 来运行您的脚本。





4、第一个shell程序

$vi firstscript.sh

echo “You are welcome to use base.” 

echo “Current work directory is $PWD.”

echo “You are $LOGNAME.”





添加运行权限

$chmod +x firstscript.sh

開始执行程序:

$./firstscript.sh





5、简单的运算 

$[expression]

比如:

var1=2

var2=$[$var1*10+1]

echo $var2    

返回值为21。 





-r文件名称:假设文件存在且可读则为真

-w文件名称:假设文件存在且可写则为真

-x文件名称:假设文件存在且可运行则为真

-s文件名称:假设文件存在且至少有一个字符则为真

-d文件名称:假设文件存在且为文件夹则为真

-f文件名称:假设文件存在且为普通文件则为真

-e文件名称:假设文件存在则为真

-c文件名称:假设文件存在且为字符型特殊文件则为真

-b文件名称:假设文件存在且为块特殊文件则为真





-a 逻辑与

-o 逻辑或 

!  逻辑否





String_operator 能够为:

=:两个字符串相等

!=:两个字符串不等

-z:空串

-n:非空串 

-eq:数值相等

-ne:数值不相等

-gt:大于

-lt:小于

-le:小于等于

-ge:大于等于 





6、命令格式:read 变量名列表

功能:从键盘或文件输入数据,赋值给变量。shell用空格作为变量之间的切割符。

按回车键或者CTRL+D结束输入。

当read从文件里读取数据时候是依照行读取的,即一次读取一行。假设没有碰到回车符,则一直读到文件末尾。

读取数据的方式和从键盘输入时同样。  

$read name sex age

Yangailin male 25

$echo  $name

Yangailin

$echo $sex

male

$echo $age

25





$read name sex

Yangailin male 25

$echo $name

Yangailin

$echo $sex

male 25 





$read name sex

Yangailin male 25

$echo $name

Yangailin

$echo $sex

male 25 





7、管道pipe 

能够通过管道将一个命令的输出传递给还有一个命令作为输入。管道用竖杠|表示。它的语法格式例如以下:

命令1  |  命令2 





8、cat 命令 

cat 命令能够用来显示文件内容,创建文件。还能够用来显示控制符号(用-v选项)。 

cat命令一下子显示整个完整的文件。

假设希望每次显示一页,能够使用more命令

 $cat filename1  filename2 > filename3   

#该命令把两个文件连成一个文件filename3





9、shell高级编程

shell 同意用户在不同的命令之间。放上特殊的排列字符。用户假设须要在一行中给出多个命令需使用分号“;”。

command1 ; command2  





command1 && command2

上面的命令表示仅仅有当 command1 正确执行完成后。才执行 command2 。 





command1 || command2

上面的命令表示仅仅有当 command1 执行失败才会执行 command2 。 





在shell以下。一个新产生的进程能够通过用命令后面的符号“;”和“&”来分别曾经台和后台的方式来运行,语法例如以下: 

command; 产生一个前台的进程,下一个命令须等该命令执行结束后才干输入。

command & 产生一个后台的进程,此进程在后台执行的同一时候。能够输入其它的命令。 





在shell中有两种命令分组的方法:“()”和“{}”,当用户在运行某个命令时不想让命令运行时对状态集合(如位置參数、环境变量、当前工作文件夹等)的改变影响到以下语句的运行时,就应该把这些命令放在圆括弧中

{}用于将顺序运行的命令的输出结果用于还有一个命令的输入(管道方式)





shell程序的调试主要是利用bash命令解释程序的选择项。

调用bash的形式是:

  bash -选择项 shell程序文件名称

-e:假设一个命令失败就马上退出

-n:读入命令可是不运行它们

-u:置换时把未设置的变量看作出错

-v:当读入shell输入行时把它们显示出来

-x:运行命令时把命令和它们的參数显示出来 





调试shell程序的主要方法是利用shell命令解释程序的“-v”或“-x”选项来跟踪程序的运行。“-v”选择项使shell在运行程序的过程中,把它读入的每个命令行都显示出来。而“-x”选择项使shell在运行程序的过程中把它运行的每个命令在行首用一个“+”加上命令名显示出来。并把每个变量和该变量所取的值也显示出来。

Linux下Shell编程的更多相关文章

  1. Linux 下shell 编程学习脚手架

    linux body { font-family: Helvetica, arial, sans-serif; font-size: 14px; line-height: 1.6; padding-t ...

  2. linux下shell编程示例-获取进程id

    今天初步学习了一下linux下的shell编程,简单记录一下测试用例 1.编辑shell脚本文件如下: #!/bin/bashecho "hello bash linux"echo ...

  3. Linux下shell编程实例

    1. 推断一文件是不是块或字符设备文件.假设是将其复制到 /dev 文件夹下 read -p "input a file:" filename if [ -b $filename ...

  4. linux 下Shell编程(四)

    for循环应用实例 for 循环可以对一个记录集中地数据依次集中地数据依次进行处理. #!/bin/bash #4.13.sh for clear     #看下图区别 for((i=1:i<1 ...

  5. linux 下 Shell编程(三)

    if语句应用实例 if语句可以在程序中实现各种逻辑判断. 用if语句判断并显示文件的信息 可以用test命令和相关的参数来判断文件的属性,然后根据判断结果输出文件的信息. #!/bin/bash #4 ...

  6. 06 Linux下Shell介绍

    一.概述 每个人在成功登陆Linux后,系统会出现不同的提示符号,例如$,~,#等,然后你就可以开始输入需要的命令.若命令正确,系统就会依据命令的要求来执行,直到注销系统为止,在登陆到注销期间,输入的 ...

  7. .Neter玩转Linux系列之四:Linux下shell介绍以及TCP、IP基础

    基础篇 .Neter玩转Linux系列之一:初识Linux .Neter玩转Linux系列之二:Linux下的文件目录及文件目录的权限 .Neter玩转Linux系列之三:Linux下的分区讲解 .N ...

  8. linux 下shell 编写脚本

    linux 下shell 编写脚本: 1.程序结构练习:编写一个脚本,给定一个正整数,计算出这个数所有位的数字之和. 例如:程序给定输入123,那么应该返回1+2+3=6. 2.程序结构练习:编写一个 ...

  9. 【Hadoop离线基础总结】linux的shell编程

    linux的shell编程 基本了解 概述 Shell是一个用C语言编写的程序,通过shell用户可以访问操作系统内核服务,它类似于DOS下的command和后来的cmd.exe.Shell既是一种命 ...

随机推荐

  1. DOM节点例子

    elementNode.setAttribute(name,value) 1.name: 要设置的属性名. 2.value: 要设置的属性值. elementNode.getAttribute(nam ...

  2. 安卓app测试之cpu监控

    安卓app测试之cpu监控,如何获取监控的cpu数据呢? 一.通过Dumpsys 来取值 1.adb shell dumpsys cpuinfo 二.top 1.top -d 1|grep packa ...

  3. ES6字符串模板

    这里做个简单的拓展,之前做vue组件时,经常用到拼接字符串,换行时用到\,既费时又麻烦.这里介绍个ES6字符串模板方法 旧版拼接(各种换行拼接) Vue.component('obj-prop',{ ...

  4. svn无法显示日期和作者

    当遇到这种情况,只要把这个read改为none就可以显示了  亲测绝对管用

  5. A4. JVM 内存分配及回收策略

    [概述] Java 技术体系中所提倡的自动内存管理最终可以归结为自动化地解决两个问题:给对象分配内存以及回收分配给对象的内存. 对象的内存分配,往大方向讲,就是在堆上分配,对象主要分配在新生代的 Ed ...

  6. 「 HDU P3555 」 Bomb

    # 题目大意 给出 $\text{T}$ 个数,求 $[1,n]$ 中含 ‘49’ 的数的个数. # 解题思路 求出不含 '49' 的数的个数,用总数减去就是答案. 数位 $DP$,用记忆化来做. 设 ...

  7. 把 web 项目部署到 Linux 服务器上

    1.打开 eclipse,在已经完成的 web 项目上面点击右键,选择 export,然后选择导出成 war 包. 以部署 SMBMS 项目为例   2.项目打包成 war ,选择项目导出到的位置. ...

  8. 【瞎扯】 About Me

    手动博客搬家: 本文发表于20181218 13:54:31, 原地址https://blog.csdn.net/suncongbo/article/details/85063885 来了?坐,欢迎来 ...

  9. Apache Maven Cookbook(一)maven 使用命令创建、编译java项目

    一.创建 使用命令创建项目分几步: 1.打开命令行窗口,比如cmd,把目录切换至想要创建项目地方. 2.执行如下命令: mvn archetype:generate -DgroupId=com.zua ...

  10. 设置idea快速生成doc comment

    在eclipse中快速生成方法的doc comment快捷键是Alt+Shift+J, 而在idea中没有对应的快捷键,但是能实现相似的功能. 1.在方法上面输入/** 然后回车就可以生成注释了. 2 ...