文档章节

笔记:bash脚本入门

AllenOR灵感
 AllenOR灵感
发布于 2017/09/10 00:47
字数 1119
阅读 1
收藏 0

编写bash脚本,首先在文件的第一行加入如下代码:

#! /bin/bash

比如文件test1.sh的完整代码:

#! /bin/bash
echo "Just a test!"

执行如下指令:

chmod +x test1.sh && ./test1.sh

即可看到效果。

一、变量相关

1、输入变量

read var

2、输出变量

echo $var

demo代码如下:

#! /bin/bash

read var
echo $var

二、判断相关

1、逻辑判断

逻辑卷标

表示意思

1.

关于档案与目录的侦测逻辑卷标!

-f

常用!侦测『档案』是否存在 eg: if [ -f filename ]

-d

常用!侦测『目录』是否存在

-b

侦测是否为一个『 block 档案』

-c

侦测是否为一个『 character 档案』

-S

侦测是否为一个『 socket 标签档案』

-L

侦测是否为一个『 symbolic link 的档案』

-e

侦测『某个东西』是否存在!

2.

关于程序的逻辑卷标!

-G

侦测是否由 GID 所执行的程序所拥有

-O

侦测是否由 UID 所执行的程序所拥有

-p

侦测是否为程序间传送信息的 name pipe 或是 FIFO (老实说,这个不太懂!)

3.

关于档案的属性侦测!

-r

侦测是否为可读的属性

-w

侦测是否为可以写入的属性

-x

侦测是否为可执行的属性

-s

侦测是否为『非空白档案』

-u

侦测是否具有『 SUID 』的属性

-g

侦测是否具有『 SGID 』的属性

-k

侦测是否具有『 sticky bit 』的属性

4.

两个档案之间的判断与比较 ;例如[ test file1 -nt file2 ]

-nt

第一个档案比第二个档案新

-ot

第一个档案比第二个档案旧

-ef

第一个档案与第二个档案为同一个档案( link 之类的档案)

5.

逻辑的『和(and)』『或(or)

&&

逻辑的 AND 的意思

||

逻辑的 OR 的意思

2、运算符号

运算符号

代表意义

=

等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串

!=

不等于 应用于:整型或字符串比较 如果在[] 中,只能是字符串

<

小于 应用于:整型比较 [] 中,不能使用 表示字符串

>

大于 应用于:整型比较 [] 中,不能使用 表示字符串

-eq

等于 应用于:整型比较

-ne

不等于 应用于:整型比较

-lt

小于 应用于:整型比较

-gt

大于 应用于:整型比较

-le

小于或等于 应用于:整型比较

-ge

大于或等于 应用于:整型比较

-a

双方都成立(and) 逻辑表达式 –a 逻辑表达式

-o

单方成立(or) 逻辑表达式 –o 逻辑表达式

-z

空字符串

-n

非空字符串



3、逻辑表达式

test 命令:

# test -d /etc/ && echo 'ok'

ok

[] 表达式:

# [ 1 -eq 1 ] && echo 'ok'

ok

[[]] 表达式:

# [[ 2 < 3 && 4 > 5 ]] && echo 'ok'

ok

4、条件判断

if then fi 的方式

结构如下:

if [ expression ]

then

  statments

fi

或者

if [ expression ]

then

  statments

else

  statments

fi

或者

if [ expression ]

then

  statments

else if [ expression ]

  then

    statments

  else

    statments

fi

或者

if [ expression ]

then

  statments

elif [ expression ]

  then

    statments

  else

    statments

fi

示例代码如下:

#! /bin/bash 
echo "Press y to continue" 
read yn 
if [ "$yn" = "y" ] ; then 
    echo "Script is running ..." 
else 
    echo "Break!" 
fi

case ...esac方式

结构如下:

case "$var" in

 condition1 )

  statments1;;

 condition2 )

  statments2;;

 ...

 * )

  default statments;;

esac

示例代码如下:

#! /bin/bash 
echo "This program will print your selection!" 

case $1 in 
A) 
     echo "your choice is A" 
    ;; # the break 
B) 
     echo "your choice is B" 
    ;; 
C) 
     echo "your choice is C" 
    ;; 
*) # the default way 
    echo "usage {A|B|C}" 
    exit 1 
esac

三、循环相关

for循环

结构如下:

for $var in [list]

do

  statments

done

示例代码如下:

#! /bin/bash 
declare -i s 
for (( i=1; i<=100; i=i+1 )) 
do 
    s=s+i 
done 
echo "The count is ==> $s"

while循环

结构如下:

while [ condition ]

do

  statments

done

until循环

结构如下:

until [ condition is TRUE ]

do

  statments

done

四、其它

1、命令行参数

类似c语言中main函数的argv参数,通常的调用如下:

myscript param1 param2

demo代码如下:

 

#! /bin/bash 
echo $# 
echo $@ 
echo '$0 = '$0 
echo '$1 = '$1 
echo '$2 = '$2

 

解释如下:

$# 是传给脚本的参数个数

$@ 是传给脚本的所有参数的列表

$0 是脚本本身的名字

$1是传递给该shell脚本的第一个参数

$2是传递给该shell脚本的第二个参数

2、调试

# sh [-nvx] scripts

-n :不要执行 scripts ,查询 scripts 内的语法,若有错误则予以列出!

-v :在执行 scripts 之前,先将 scripts 的内容显示在屏幕上;

-x :将有使用到的 scripts 内容显示在屏幕上,-v 稍微不同!  

本文转载自:http://www.cnblogs.com/MikeZhang/archive/2012/08/22/bashScript20120821.html

AllenOR灵感
粉丝 11
博文 2635
码字总数 83001
作品 0
程序员
私信 提问
阶段性总结_学习笔记

从11月6日到12月6日,一个月从入门到放弃目前为止,学习了 FHS,linux文件架构标准/ /boot /dev /opt /mnt /media /proc /tmp /usr /etc /lib 等等文件的查找locatefind。文本处理工具cat,t...

lajifeiwomoshu
2017/12/07
0
0
《跟老男孩学Linux运维之shell编程实战》-第一章 shell脚本初步入门

本文是在学习《跟老男孩学Linux运维之shell编程实战》这本书时记录的知识点。看了这本书,我受益匪浅,当然这仅是我个人观点。下面我们言归正传,开始了解一下shell脚本吧! shell本身是一个...

shayatou_1990
2017/04/17
0
0
Cocoapods相关笔记

个人常用的Profile中的库 cocoapods原理 cocoapods将所有的依赖库放到一个名为Pods的项目中, 然后主项目依赖Pods项目, 这样, 源码管理工作都从主项目转移到了Pods项目中. Pods项目最终会编译...

hell03W
2016/05/26
87
0
Linux Shell学习之基础篇(不适合学习,仅为本人笔记)

在学习Linux和OpenStack过程中,感觉不管是大规模部署部署还是运维,Shell脚本都已经是标配,所以学好脚本很有必要。 以下仅为Linux Shell的一些基础笔记,这里作为笔记记下。 ============...

yishuizhao
2018/07/02
0
0
Linux shell 程序设计1——安装及入门

1、什么是shell? shell是linux内核的“壳”,是用户和内核的桥梁。它类似于windows下的命令提示符,将用户输入的命令解释给内核执行,并返回给用户结果。与windows命令提示符不同的是,she...

宅蓝三木
2014/04/24
68
0

没有更多内容

加载失败,请刷新页面

加载更多

MainThreadSupport

MainThreadSupport EventBus 3.0 中的代码片段. org.greenrobot.eventbus.MainThreadSupport 定义一个接口,并给出默认实现类. 调用者可以在EventBus的构建者中替换该实现. public interface ...

马湖村第九后羿
39分钟前
3
0
指定要使用的形状来代替文字的显示

控制手机键盘弹出的功能只能在ios上实现,安卓是实现不了的,所以安卓只能使用type类型来控制键盘类型,例如你要弹出数字键盘就使用type="number",如果要弹出电话键盘就使用type="tel",但这...

前端老手
49分钟前
5
0
总结:Raft协议

一、Raft协议是什么? 分布式一致性算法。即解决分布式系统中各个副本数据一致性问题。 二、Raft的日志广播过程 发送日志到所有Followers(Raft中将非Leader节点称为Follower)。 Followers收...

浮躁的码农
57分钟前
7
0
Flask-admin Model View字段介绍

Model View字段介绍 can_create = True 是否可以创建can_edit = True 是否可以编辑can_delete = True 是否可以删除list_template = 'admin/model/list.html' 修改显......

dillonxiao
今天
5
0
从AnnotationTransactionAspect开始rushSpring事务

0. Spring 事务 with LTW 0.1. Spring 事务 With LTW的原因: Pure Proxy-base mode有缺陷,其失效原因分析及使用方法及运行机制(LoadTimeWeaverBeanDefinitionParser和 AspectJWeavingEnable......

Aruforce
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部