目录

一、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. qt 字符数组如何转换字符串?

    char 字符数组如何转换成 QString? char source{1024} = {0}; QString des = QString::fromLocal8Bit(source);

  2. java网络编程(5)——Tcp

    Tcp相对于Udp就是面向连接的协议,最主要的特点要建立连接之后才能通信,客户端用Socket需要指点地址与端口,服务端用ServeSocket,只需指点监听某个端口,因为是面向连接,所以服务器端一定 ...

  3. python 下划线--完美解释

    Python 用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划 ...

  4. numpy 实践记录

    reshape是从低维度到高维度.max,sum等函数都是注意axis,不选择就是全体计算. swapaxes 转换轴,将两个选择的轴对调,在CNN中X乘W有的时候需要拉伸,如果轴不同结果不对. 看p ...

  5. Python实现一些常用排序算法

    一些常用的排序 #系统内置排序算法#list.sort()#heapq模块 def sys_heap_sort(list): import heapq heap = [] for i in range ...

  6. mac下安装ELK

    本文主要为自己所走弯路而做的补充,对小白(比如我)来讲某些博客讲的还是高深了,特地来此补充说明一些东西. 主要步骤参考http://blog.csdn.net/ywheel1989/article/d ...

  7. EF Core下利用Mysql进行数据存储在并发访问下的数据同步问题

    小故事 在开始讲这篇文章之前,我们来说一个小故事,纯素虚构(真实的存钱逻辑并非如此) 小刘发工资后,赶忙拿着现金去银行,准备把钱存起来,而与此同时,小刘的老婆刘嫂知道小刘的品性,知道他发工资的日子,也 ...

  8. .Net之路,感谢对我深远影响的三位前辈

    为什么要写这篇文章?为什么创立这个站点? 本人大四,学习.Net三年有余,随着近期开始转向对.Net Core的关注,我开始了解到了张善友(www.csharpkit.com).腾飞(www.jess ...

  9. android小程序之幸运菜谱

    android小程序之幸运菜谱 前言:刚刚结束短短5天的android公开课程,收获不少,写下来记录一下吧!(因为学校校企公开课的缘故才偶然接触的android,所以只学了这几天,不喜勿喷) 一开始得 ...

  10. CentOS 7.0 启动多个MySQL实例(mysql-5.7.21)

    Linux系统:CentOS-7.0 MySQL版本:5.7.21 Linux系统下启动多个MySQL实例,目前知道有两种方法,一种是通过官方提供的mysqld_multi.server来实现,但是我 ...