笔记:bash脚本入门

摘要:
-G检测它是否由GID执行的程序拥有-O检测它是否为UID执行的程序所拥有-p检测它是在程序之间传输信息的名称管道还是FIFO(老实说,它只能是字符串<它不能用于表示字符串>它不能用来表示字符串-eq等于:整数比较-a两边都是真的(和)逻辑表达式-a逻辑表达式-o一侧是真(或)逻辑表达式–o逻辑表达式-z空字符串-n非空字符串3。逻辑表达式测试命令:#[2<

编写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 稍微不同!  

免责声明:文章转载自《笔记:bash脚本入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇EXPORT_SYMBOL的作用是什么Zabbix监控Windows事件日志下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

任意文件上传

1.1 漏洞描述     上传漏洞这个顾名思义,就是攻击者通过上传木马文件,直接得到WEBSHELL,危害等级超级高,现在的入侵中上传漏洞也是常见的漏洞。     导致该漏洞的原因在于代码作者没有对访客提交的数据进行检验或者过滤不严,可以直接提交修改过的数据绕过扩展名的检验。 1.2 漏洞危害      1)可以得到WEBSHELL      2)上传木马...

dwr报错整理【一】

对于dwr,又一个非常重要的问题的记录.在使用dwr与spring整合时,发现当js文件里使用对应的java服务器端代码时,只要你在对应的方法里使用dao,就会报A server error has occured的错误.我采取的方法是在对应的方法里本是用dao的地方,从新写业务端的代码,比如我的以查询对应内容,findcontext()方法里使用了dao...

使用 Air 热编译 Gin 项目

Air 是一款能够自动监控代码并进行热编译 Golang 项目的工具,并不局限于 Gin 项目。 下载 官方文档推荐了几种下载方式: Go go get -u github.com/cosmtrek/air macOS curl -fLo air https://git.io/darwin_air Linux curl -fLo air https:/...

[OpenCVsharp]利用指针实现高速访问像素RGB值

先简单介绍下什么是OpenCVsharp,内容取自百度百科 OpenCvSharp是一个OpenCV的.Net wrapper,应用最新的OpenCV库开发,使用习惯比EmguCV更接近原始的OpenCV,有详细的使用样例供参考。该库采用LGPL发行,对商业应用友好。使用OpenCvSharp,可用C#,VB.NET等语言实现多种流行的图像处理(image...

SourceTree使用教程详解(连接远程仓库,克隆,拉取,提交,推送,新建/切换/合并分支,冲突解决)

前言:   俗话说的好工欲善其事必先利其器,Git分布式版本控制系统是我们日常开发中不可或缺的。目前市面上比较流行的Git可视化管理工具有SourceTree、Github Desktop、TortoiseGit,综合网上的一些文章分析和自己的日常开发实践心得个人比较推荐开发者使用SourceTree,因为SourceTree同时支持Windows和Mac...

windows花指令和堆栈溢出原理

1、今天拿到一个exe,用IDA打开后在main的代码如下,想直接F5,报错如下:      细看代码,有两个比较有意思的地方:    第一个红框,JZ和JNZ跳转到同一个地址:0x4010A1+1=0x4010A2    第二个红框,也就是0x4010A1的开始地址是一个call指令,5字节长度;再下一个指令就从0x4010A6开始了;    0x4...