首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell小结

Shell小结

作者头像
王亚昌
发布2018-08-03 15:03:24
2920
发布2018-08-03 15:03:24
举报
文章被收录于专栏:王亚昌的专栏王亚昌的专栏

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 $_: 显示出最後一个执行的命令

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010年02月03日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档