Shell小结

1.数字计算
declare -i num=10
while [ $num -ne 0]
do
 num=num-1
done

num=10
while [ $num -ne 0]
do
 let 'num -= 1'
 #let 'num = num -1'
 #num=`expr $num -1`
 (( num-- )) #用(( )) 可以使用类C风格的计算式,注意算式两边要加空格(( t = a<457:11))
done

let 'num = $RANDOM % 6 + 1'

2.读入文件
while read line
do
 echo $line
done<filename

#读入一下目录下所有文件,所打印出来
FILES='ls'
for file in $FILES
do
 while read word
 do
  echo $word
 done<$file
done
3.for循环
for name in "derry china" "daisy usa" "jintaiqi korea"
do
 echo $name
done

#显示一下目录下以sh结尾的文件
for file in *[sh]
do
 ls -lh $file
done

for ((a=1,b=1; a<=LIMIT; a++, b++))
do
 echo -n "$a-$b"
done

4.while循环
i=0
while ($i < 10)
#while [ "$i" -lt 10 ]
do
 echo $i
 #((i++))
 #i=`expr $i + 1`
 let "i += 1"
done

#读入所有命令行参数
while [ $# -gt 0 ]
do
 echo $1
 shift
done

5.until循环
i=0
until ((i >= 10))
do
 echo $i
 ((i++))
done

6.case
read cmd
case "$cmd" in
 "quit" | "q" ) echo "quit"; exit 0;;
 "ls" ) `ls`;;
 "date" ) `date`;;
esac

7.常用函数
#检查是否全部字母输入
SUCCESS=0
FAILURE=-1
isalpha()
{
if [ -z $1]
then return $FAILURE
fi

case "$1" in
*[!a-zA-Z]*|"") return $FAILURE;;
*           ) return $SUCCESS;;
esac
}

#检查是否全部数字输入
isdigit()
{
[ $# -eq 1] || return $FAILURE

case $i in
*[!0-9]*|"") return $FAILURE;;
*          ) return $SUCCESS;;  
}

for param in 0 a 9 %
do
 if isdigit "$param"
 then echo "$param is digit"
 else echo "$param is not digit"
 fi
done
5.字符串操作
string=defabcdefxyz
len=`expr length string`
pos=`expr index $string abc`   #查找第一个字串的位置
str=`expr substr $string 2 6` #取指定位置的子串

6.文件包含
config.sh:
IP=192.168.0.1

read.sh
. config.sh
#source config.sh
echo $IP

7.test测试命令
test命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试,其测试符和相应的功能分别如下:

(1)数值测试:
-eq:等于则为真
-ne:不等于则为真
-gt:大于则为真
-ge:大于等于则为真
-lt:小于则为真
-le:小于等于则为真
(2)字符串测试:
=:等于则为真
!=:不相等则为真
-z 字符串:字符串长度伪则为真
-n 字符串:字符串长度不伪则为真
(3)文件测试:
-e 文件名:如果文件存在则为真
-r 文件名:如果文件存在且可读则为真
-w 文件名:如果文件存在且可写则为真
-x 文件名:如果文件存在且可执行则为真
-s 文件名:如果文件存在且至少有一个字符则为真
-d 文件名:如果文件存在且为目录则为真
-f 文件名:如果文件存在且为普通文件则为真
-c 文件名:如果文件存在且为字符型特殊文件则为真
-b 文件名:如果文件存在且为块特殊文件则为真
另外,Linux还提供了与(“!”)、或(“-o)、非(“-a”)三个逻辑操作符用于将测试条件连接起来,其优先级为:“!”最高,“-a”次之,“-o”最低。
同时,bash也能完成简单的算术运算,格式如下:
$[expression]
例如:var1=2
var2=$[var1*10+1]
则:var2的值为21。

8.命令分组
在shell中有两种命令分组的方法:“()”和“{}”,前者当shell执行()中的命令时将再创建一个新的子进程,然后这个子进程去执行圆括弧中的命令。
当用户在执行某个命令时不想让命令运行时对状态集合(如位置参数、环境变量、当前工作目录等)的改变影响到下面语句的执行时,就应该把这些
命令放在圆括弧中,这样就能保证所有的改变只对子进程产生影响,而父进程不受任何干扰;{}用于将顺序执行的命令的输出结果用于另一个命令
的输入(管道方式)。当我们要真正使用圆括弧和花括弧时(如计算表达式的优先级),则需要在其前面加上转义符(/)以便让shell知道它们不是用于
命令执行的控制所用。

9.信号
trap命令用于在shell程序中捕捉到信号,之后可以有三种反应方式:
(1)执行一段程序来处理这一信号
(2)接受信号的默认操作
(3)忽视这一信号

trap对上面三种方式提供了三种基本形式:
第一种形式的trap命令在shell接收到signal list清单中数值相同的信号时,将执行双引号中的命令串。

trap 'commands' signal-list
trap "commands" signal-list

为了恢复信号的默认操作,使用第二种形式的trap命令:trap signal-list

第三种形式的trap命令允许忽视信号:trap " " signal-list

注意:(1)对信号11(段违例)不能捕捉,因为shell本身需要捕捉该信号去进行内存的转储。
(2)在trap中可以定义对信号0的处理(实际上没有这个信号),shell程序在其终止(如执行exit语句)时发出该信号。
(3)在捕捉到signal-list中指定的信号并执行完相应的命令之后,如果这些命令没有将shell程序终止的话,shell程序将继续执行收到信号时所执行的命令后面的命令,这样将很容易导致shell程序无法终止。
另外,在trap语句中,单引号和双引号是不同的,当shell程序第一次碰到trap语句时,将把commands中的命令扫描一遍。此时若commands是用单引号括起来的话,那么shell不会对commands中的变量和命令进行替换,否则commands中的变量和命令将用当时具体的值来替换。

10. bash的内部命令

1.eval 命令格式:eval args 功能:当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令,然后执行。
for i in ls df;
do
 ret=eval $i
 echo $value
done

2.exec 命令格式:exec 命令 命令参数
功能:当shell执行到exec语句时,不会去创建新的子进程,而是转去执行指定的命令,当指定的命令执行完时,该进程,也就是最初的shell就终止了,所以shell程序
中exec后面的语句将不再被执行。

#调用子进程
ret=`exec ./wait.sh`
#输出子进程返回值
echo $?
#输出子进程输出
echo $ret

3.export 命令格式:export 变量名 或:export 变量名=变量值
功能:shell可以用export把它的变量向下带入子shell从而让子进程继承父进程中的环境变量。但子shell不能用export把它的变量向上带入父shell。

注意:不带任何变量名的export语句将显示出当前所有的export变量。

4.wait
功能:是shell等待在后台启动的所有子进程结束。Wait的返回值总是真。
#!/bin/bash
eval ./wait.sh &
wait

5. 特殊参数
$*: 代表所有参数,其间隔为IFS内定参数的第一个字元
$@: 与*星号类同。不同之处在於不参照IFS
$#: 代表参数数量
$?: 执行上一个指令的返回值
$-: 最近执行的foreground pipeline的选项参数
$$: 本身的Process ID
$: 执行上一个背景指令的PID
$_: 显示出最後一个执行的命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值