目录

一、shell脚本的基本使用

1、语言规范

2、变量

3、重定向(>,>>)

二、运算符和常用判断

1、比较运算符

2、逻辑运算符

3、常用判断

三、程序结构

1、分支(if语句)

2、循环

四、函数

shell的本质是一段应用程序,它使得用户和操作系统之间可以交互,是用户和操作系统的中介。

一、shell脚本的基本使用

1、语言规范

(1)文件以.sh结尾;

(2)文件头为:#!/bin/bash (表示使用的是bash shell);

(3)以#开头为注释;

(4)输出: echo "输出内容";

(5)读取:read -p "自定义读取提示" name   (name为读取内容设置的变量名,也可设置多个变量名,以空格分隔,在读取内容时也会以空格分隔内容并分配到相应的变量名)

2、变量

(1)变量的创建级赋值

变量名=变量值

变量名不用声明类型,由字母、数字和下划线组成,但不能以数字开头;默认的大写变量名表示系统变量,小写表示普通变量;

变量值可以为字符、数字和命令,当变量值为命令时需用反单引号(即esc下边的键)包围起来;

例:w=1`ls -l`

(2)变量值的输出($)

需在变量前加上$符号,当使用echo加单引号时输出的只是纯文本,而不会将变量的值提取出来,想要得到变量的值,只能使用双引号将变量包围;

显示所有用户自定的变量用命令:set

显示所有的系统变量用命令:env

(3)从程序外部给程序传递参数

可在程序内部加上$1,表示从外部传进程序的第一个参数;同理$2表示第二个参数,外部的多个参数之间以空格分隔。

例:给程序a.sh传入ab,22两个参数,使用命令:a.sh ab 22

$0表示程序自身,$#表示所有输入参数的个数,$@表示所有的参数。

如果不是很明了可参考python中的sys.argv,机理基本一样 http://www.cnblogs.com/aland-1415/p/6613449.html

3、重定向(>,>>)

即通过命令将结果输入到文件中

例:ls -l >name.txt

如果文件不存在将会创建文件,如果文件存在,使用“>”时将会对文件进行覆盖重写,使用“>>”将会在文件的末尾进行追加写入。

也可以在>或>>前加上1或2,注意不要与>,>>之间有空格,其中1表示正确的命令,2表示错误的命令。

二、运算符和常用判断

1、比较运算符

等于:==

不等于:!=

大于:>或-gt

小于:<或-lt

大于等于:>=或-ge

小于等于:<=或-le

在使用(( ))中的条件中只能使用>等符号而不能使用-gt,在shell中(( ))和[]在一定程度上是等价的。

2、逻辑运算符

逻辑与:-a

逻辑或:-o

逻辑非:!

3、常用判断

-r 文件名:文件是否存在且可读

-w 文件名:文件是否存在且可写

-x 文件名:文件是否存在且可执行

-f 文件名:判断文件是否存在且是普通文件

-d 文件名:文件是否存在且是目录

-e 文件名:文件是否存在

-z 变量:判断字符串长度是否等于0

-n 变量:字符串长度是否不等于0

在需加[]的条件判断中,如果在-r等前边加上test则不用加[];

三、程序结构

1、分支(if语句)

(1)基本格式:

if [ 条件 ]

then

语句1

else

语句2

fi

注意:每个[ ] 左右两端都需要有空格,条件语句中如果包含变量则需要用双引号包围。

then也可以写在条件之后,不过要在条件之后加上分号。

(2)多个条件连接格式:

if [ condition1 ] ;then

sentence1

elif [ condition2 ] ;then

sentence2

elif [ condition3 ] ;then

sentence3

else

sentence4

fi

(3)case选择

使用格式:

case $变量名 in

"值1")

语句1;;

"值2")

语句2;;

...

*)

语句n

esac

其中;;表示语句结束,*)表示上边所有结果都不符合的最后选择;

值也可以用区间,但最多只能用0-9的数字。

2、循环

(1)while循环

格式

while [ 条件 ]

do

语句

done

常用循环变量变化写法:

((i++))

((i+=1)

let i=i+1

i=$(($i+1))

i=$ [ $i+1 ]

常用运算迭代写法:

((sum=$sum+$i))

sum=$[$sum+$i]

sum=$(($sum+$i))

(2)for 循环

for 迭代子

do

语句

done

for循环常用迭代子的写法:

((i=1;i<=10;i++))

i in 1 2 3 4 5 6

i in `seq 1  2  15`  #1和15表示起始点,2表示步长

四、函数

函数构造

函数名(){

内容

}

函数调用直接用函数名即可。

Linux shell 基础的更多相关文章

  1. Linux Shell基础(下)

    Linux Shell基础(下) 目录 一.shell特殊符号cut命令 二.cut.sort.wc.uniq命令 三.tee.tr.split命令 四.简易审计系统 五.fork, exec, so ...

  2. Linux shell基础知识(上)

    Linux shell基础知识(上) 目录 一.shell介绍 二.命令历史 三.命令补全和别名 四.通配符 五.输入输出重定向 六.管道符和作业控制 七.shell变量 八.环境变量配置文件 九.b ...

  3. linux shell 基础 使用日志与心得

    linux shell 基础 使用日志与心得 1.#!/bin/bash 第一行就出现#!/bin/bash是指此脚本使用/bin/bash来解释执行.其中,#!是一个特殊的表示符,其后,跟着解释此脚 ...

  4. Linux Shell 基础知识(一)

    1. 本文知识结构 2. shell 基础知识 2.1 shell 简单介绍 ​ GNU bash shell 能提供对 Linux 系统的交互式访问,一般来说,使用快捷键 Ctrl + Alt + ...

  5. Linux shell基础

    shell是核心程序kernel之外的指令解析器,是一个程序,同事是一种命令语言和程序设计语言 --shell是命令解析器,用户输入命令,它去解析. shell类型 ash,bash,ksh,csh, ...

  6. linux shell基础语法

    1.第一个Shell脚本 打开文本编辑器,新建一个文件,扩展名为sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用php写shell 脚本,扩展名就用php好了. 输入一些代码 ...

  7. Linux Shell基础 环境变量配置文件

    source命令:使环境变量配置文件强制生效 source 命令会强制执行脚本中的全部命令,而忽略脚本文件的权限.该命令主要用于让重新配置的环境变量配置文件强制生效.source 命令格式如下: [r ...

  8. Linux Shell基础 位置参数变量、预定义变量

    位置参数变量 在 Linux 的命令行中,当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数.其中,$0 代表命令行本身,$1 代表第 1 个参数,$2 代表第 2 个参数 ...

  9. Linux Shell基础 环境变量

    环境变量 环境变量和用户自定义变量最主要的区别在于,环境变量是全局变量,而用户自定义变量是局部变量.用户自定义变量只在当前的 Shell 中生效,而环境变量会在当前 Shell 和这个 Shell 的 ...

  10. Linux Shell基础 Shell基本知识

    概述 在 Linux 的脚本中,只要是基于 Bash语法写的Shell脚本第一行必须是"#!/bin/bash",用来声明此文件是一个脚本. 运行方式 Shell 脚本的运行主要有 ...

随机推荐

  1. SmileyFace——基于OpenCV的人脸人眼检测、面部识别程序

    项目地址 https://github.com/guoyaohua/SmileyFace 开发环境 Visual Studio 2010 MFC + OpenCV 功能描述 静态图像人脸检测 视频人脸 ...

  2. 【BZOJ3309】DZY Loves Math

    Time Limit: 5000 ms Memory Limit: 512 MB Description ​ 对于正整数n,定义f(n)为n所含质因子的最大幂指数.例如f(1960)=f(2^3 * ...

  3. day2(字符串、格式化输出、运算符、流程控制)

    一.字符串 在Python中,加了引号的字符都被认为是字符串! 单引号.双引号.多引号的区别? 单引号和 双引号没有任何区别,但是某种情况下需要单双配合 如 msg = " My name ...

  4. Spring data mongodb 聚合,投射,内嵌数组文档分页.

    尽量别直接用 DBObject  ,Spring data mongodb 的api 本来就没什么多大用处,如果还直接用 DBObject 那么还需要自己去解析结果,说动做个对象映射,累不累 Spri ...

  5. 使用tcpcopy导入线上流量进行功能和压力测试

    - 假设我们要上线一个两年内不会宕机的先进架构.在上线前,免不了单元测试,功能测试,还有使用ab,webbench等等进行压力测试. 但这些步骤非生产环境下正式用户的行为.或许你会想到灰度上线,但毕竟 ...

  6. 嵌入式Linux引导过程之1.6——Xloader的Xloader_Entry

    我们已经看完了XLOADER_ENTRY里调用的前两个标号的代码,分别是sys_init和ddr_init.对于一个嵌入式系统来说,这两 个部分的代码是在一开始就执行的,至少是在从bootrom里面的 ...

  7. Caused by: java.sql.SQLException: Field 'id' doesn't have a default value

    1.错误描述 org.hibernate.exception.GenericJDBCException: error executing work at org.hibernate.exception ...

  8. ubuntu16.04搭建ftp服务器

    因为习惯了vs进行开发,所以对于Linux的代码编辑开发都在vs里面进行,通常我们都是ssh远程登录到Linux,使用ftp或者sftp共享Linux目录里面的文件方便对文件的共享,这里介绍一下在ub ...

  9. I Hate It HDU - 1754

    很多学校流行一种比较的习惯.老师们很喜欢询问,从某某到某某当中,分数最高的是多少. 这让很多学生很反感. 不管你喜不喜欢,现在需要你做的是,就是按照老师的要求,写一个程序,模拟老师的询问.当然,老师有 ...

  10. 主流nosql数据库对比

    目前开源的NOSQL数据库有,Redis,Tokyo Cabinet,Cassandra,Voldemort,MongoDB,Dynomite,HBase,CouchDB,Hypertable, Ri ...