天天看点

shell脚本编程部分技巧总结

shell脚本编程部分技巧总结

今天看脚本,发现有好多不懂的地方,于是查找资料,总结了一下。

1、

${var:-word} //如果var定义了,就使用var,如果没有定义,则使用后面word的值

如:下面的脚本,如果输入,则显示输入的信息.如果不输入直接回车,则显示abc、但是这时候INT的值仍然是空的。

#!/bin/bash

read -p "please input the word: " INT

A=${INT:-abc}

echo $INT

echo $A

此时输入hello则显示

hello

此时如果直接点回车

  //空

abc

2、

${var:+word} //如果var定义了,就使用word这个值,如果没有定义,则显示为空

A=${INT:+abc}

此时如果输入hello

此时如果不输入直接回车

 //空

3、

${var:=word} //这时候如果输入,则显示输入的信息;如果不输入则显示abc,这时候INT的值被赋值为abc。

A=${INT:=abc}

如果输入hello则输出结果为

如果不输入直接回车

abc //此时INT被赋值为abc

4、

${INT:?error} //此时如果输入则显示输入信息,如果不输入,则显示错误信息并退出程序。

A=${INT:?error}

如果输入hello则显示

则输出错误信息。并推出

5、

函数的变量类型,局部和全局变量。

#!/bin/bash

A=3  //此时定义的A=3是全局变量,在整个脚本中有效

FUN() {

local A=6  //此时定义本地变量A=6只在函数内部有效

A=$[$A+1] 

echo "it's: $A" 

}

FUN

输出结果为

it's:7

3

declare -i A=2同样可以说明A是×××且A=2

declare -r B=3变量为3且不能撤销

declare -x 声明一个变量为环境变量

6、

如,截取字符串

FILENAME='/var/log/maillog'

echo ${FILENAME#*/}

echo ${FILENAME##*/}

echo ${FILENAME%/*}

echo ${FILENAME%%/*}

显示的结果为

var/log/maillog

maillog

/var/log

不多解释,自己体会一下就会明白

7、

数组

定义数组

declare -a A

初始化数组的几种方式

1、单独赋值

names[1]=alice

names[0]=hatter

names[2]=duchess

names=([2]=duchess [1]=alice [0]=hatter) //小括号里面值与值中间有空格

names=(alice hatter duchess)

names=(alice [5]=hatter duchess) //表示此数组有7个值,第1,2,3,4的值没有定义

如:这里写一个脚本,数组里面是/var下的文件名,现在我想随机取才出里面的几个文件名。

read -p "please input the number you want to choice: " NOM

declare -i I=0

for FILE in `ls /var`;do

  FILENAME[$I]=$FILE //给数组赋值

  let I++

done

  echo ${FILENAME[*]} //这两行是显示数组的值,不同的用法

  echo ${FILENAME[@]}

  echo ${#FILENAME[*]} //下两行是统计个数

  echo ${#FILENAME[*]}

declare A=1

while [ $A -le $NOM ]; do

  INDEX=$[$RANDOM%20] //这里的20是对20取模

  let A++

  echo ${FILENAME[$INDEX]}

当你执行此脚本的时候就会把所有的文件名输出2次,并输出2次文件的个数。并输出你输入的数字所随机选择的文件的名字。

如,你们班级有26位同学,每次上课要随机取几名来提问。

下一篇: shell编程

继续阅读