linux命令2

1. shell脚本调试

shell脚本调试无需任何额外的工具,只需要要在脚本文件前加-x选项即可

[root@cqk ~]# sh -x debug.sh

+ echo hello

hello

+ echo word

word

+ ls +

ls: 无法访问+: 没有那个文件或目录

-x选项将shell脚本每一行命令及执行结果打印输出,如此便能帮助开发人员快速定位到出错的脚本位置。如果代码量比较大或者脚本开发人员知道代码出错的大致位置,则可以使用set -x; set +x;命令进行局部调试,如

 

 

for i in {1..6}

do

set -x //表示跟在该命令后的脚本输出调试信息

echo $i

set +x//表示从此处禁用调试

done

echo "调用"

[root@cqk ~]# sh debug.sh

 

+ echo 1

1

+ set +x

+ echo 2

2

+ set +x

+ echo 3

3

+ set +x

+ echo 4

4

+ set +x

+ echo 5

5

+ set +x

+ echo 6

6

+ set +x

调用

2.shell函数

vi fun.sh

#!/bin/bash

function name(){

echo $1

echo $0

echo $@

}

name "one" "two"

 

 

[root@cqk ~]# sh fun.sh

one

fun.sh

one two

 

3. shell控制结构初步

3.1for循环

(1)for i in $(seq 10)

#!/bin/bash

for i in $(seq 10)

do

echo $i

done

[root@cqk ~]# sh forloop.sh

1

2

3

4

5

6

7

8

9

10

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

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

do

echo $i

done

 

(3)for i in ls

for i in `ls`

do

echo $i

done

[root@cqk ~]# sh forloop2.sh

debug.sh

forloop1.sh

forloop2.sh

forloop.sh

fun.sh

output.txt

readme.txt

shellError.txt

shell.txt

test.sh

 

 

(4)for i in ${arr[*]}

#!/bin/bash

arr=(0 1 2 3 4 5 6)

for i in ${arr[*]}

do

echo ${arr[i]}

done

[root@cqk ~]# sh forloop3.sh

0

1

2

3

4

5

6

3.2while循环控制结构

(1)计数器格式

适用于循环次数已知或固定时

#!/bin/bash

i=1

while(($i<5))

do

echo $i

let i++

done

[root@cqk ~]# sh whileloop.sh

1

2

3

4

(2)标志符结束while循环

#!/bin/bash

echo "num (1~~10): "

read num

while [[ $num != 4 ]]

do

if [ $num -lt 4 ]

then

echo "小"

read num

elif [ $num -gt 4 ]

then

echo "大"

read num

else

exit 0

fi

done

echo "正确"

[root@cqk ~]# sh whileloop1.sh

num (1~~10):

1

2

8

5

4

正确

 

3.3 if条件判断

注意点

1.if与[之间要有空格

2.[]与判断条件之间也必须有空格

3.]与;之间不能有空格

(1)对字符串判断

1.if [ str1 = str2 ];then fi ----当两个字符串相同时返回真

2.if [ str1 != str2 ];then fi ----当两个字符串不相等时返回真

3.if [ -n str1 ];then fi ----当字符串的长度大于0时返回真 (判断变量是否有值)

4.if [ -z str1 ];then fi ----当字符串的长度为0时返回真

 

#!/bin/bash

str1="hello"

str2="iell"

if [ str1 = str2 ]

then

echo "相等"

fi

if [ str1 != str2 ]

then echo "不相等"

fi

 

if [ -n str1 ]

then

echo "str1大于0"

fi

 

if [ -z str1 ]

then

echo "str1长度不是0"

 

(2)判断数字

1.int1 -eq int2 --相等

2.int1 -ne int2 --不相等

3.int1 -gt int2 --大于

4.int1 -ge int2 --大于等于

5.int1 -lt int2 --小于

6.int1 -le int2 --小于等于

#!/bin/bash

m=2

n=3

if [ $m -lt $n ]

then

echo "小于"

fi

 

if [ $m -gt $n ]

then

echo "大于"

fi

[root@cqk ~]# sh ifloop1.sh

小于

(3)判断文件

1. -r file --用户可读为真

2. -w file --用户可写为真

3. -x file --用户可执行为真

4. -f file --文件存在且为正规文件为真

5. -d file --如果是存在目录为真

6. -c file --文件存在且为字符设备文件

7. -b file --文件存在且为块设备文件

8. -s file --文件大小为非0为真,可以判断文件是否为空

9. -e file --如果文件存在为真

#!/bin/bash

if [ -f ifloop.sh ]

then

echo "文件存在"

fi

[root@cqk ~]# sh ifloop2.sh

文件存在

(4)逻辑判断

1. -a --与

2. -o --或

3. ! --非

3.4 until循环控制结构

#!/bin/bash

i=0

until [ $i -gt 2 ]

do

let i+=1

echo "i=$i"

done

[root@cqk ~]# sh until.sh

i=1

i=2

i=3

4. read命令

-a :将内容读入到数值中

read命令在shell脚本中很重要,学用这个命令来接受用户输入

-d : 表示delimiter,即定界符,一般情况下是以IFS为参数的间隔,但是通过-d,我们可以定义一直读到出现执行的字符位置。例如read –d madfds value,读到有m的字符的时候就不在继续向后读,例如输入为 hello m,有效值为“hello”,请注意m前面的空格等会被删除。这种方式可以输入多个字符串,例如定义“.”作为结符号等等。

-e :只用于互相交互的脚本,它将readline用于收集输入行。读到这几句话不太明白什么意思,先跳过。

-n : 用于限定最多可以有多少字符可以作为有效读入。例如echo –n 4 value1 value2,如果我们试图输入12 34,则只有前面有效的12 3,作为输入,实际上在你输入第4个字符‘3’后,就自动结束输入。这里结果是value为12,value2为3。

-p :用于给出提示符,在前面的例子中我们使用了echo –n “…“来给出提示符,可以使用read –p ‘… my promt?’value的方式只需一个语句来表示。

-r :在参数输入中,我们可以使用’/’表示没有输入完,换行继续输入,如果我们需要行最后的’/’作为有效的字符,可以通过-r来进行。此外在输入字符中,我们希望/n这类特殊字符生效,也应采用-r选项。

-s : 对于一些特殊的符号,例如箭头号,不将他们在terminal上打印,例如read –s key,我们按光标,在回车之后,如果我们要求显示,即echo,光标向上,如果不使用-s,在输入的时候,输入处显示^[[A,即在terminal上 打印,之后如果要求echo,光标会上移。

-t :用于表示等待输入的时间,单位为秒,等待时间超过,将继续执行后面的脚本,注意不作为null输入,参数将保留原有的值

 

5.分割语法

#!/bin/bash

str="a,s,d,f,g,h,j,k,l"

OLD_IFS="$IFS"

IFS=","

arr=($str)

IFS="$OLD_IFS"

for x in ${arr[*]}

do

echo $x

done

echo "---------"

 

arr2=(${str//,/})

for x in ${arr2[*]}

do

 

echo $x

done

[root@cqk ~]# sh split.sh

a

s

d

f

g

h

j

k

l

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值