加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

笔记:bash脚本入门

发布时间:2020-12-15 17:06:48 所属栏目:安全 来源:网络整理
导读:编写 bash 脚本,首先在文件的第一行加入如下代码: #! /bin/bash 比如文件 test1.sh 的完整代码: #! /bin/ bash echo " Just a test! " 执行如下指令: chmod +x test1.sh ./test1.sh 即可看到效果。 一、变量相关 1 、输入变量 read var 2 、输出变量 ech

编写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

单方成立(oro -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 稍微不同!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读