Shell中一些具体问题及范例

来源:互联网 发布:淘宝必买清单编辑器 编辑:程序博客网 时间:2024/06/06 02:11
Shell中的特殊符号
1.注释符“#”
除了#!/bin/sh中的#
2.$:使其后的普通字符作为变量名
变量字符长度超过1个时,用{}括起来
3.单引号:被引起的字符全部做普通字符,即全部原样
4.双引号:引号内的内容,除$,转义符\,倒引号`这三个保留特殊功能,其它字符均作普通字符
5.倒引号`:引号内的字符串当作shell命令行解释执行,得到的结果取代整个倒引号括起来的部分
`pwd` 即pwd命令的执行结果
6.反斜线\:转义字符.可以把特殊字符变成普通字符
在某个字符前面利用\能够阻止shell把后面的字符解释为特殊字符




关于shell中变量
赋值:变量名=值  等号两边不可有空格.可以用大小写字母.区分大小写
                 取值包括空格,必须用双引号括起来
变量的引用:$变量名或${变量名}
清除变量 unset 变量名
例:echo ${name}
unset name (注:name前没有$)
显示本地所有变量 set
设置只读变量:变量名=xxx
readonly 变量名


变量表达式
1.命令替换
(1)在某个命令行中使用多个命令的一个方法是通过命令替换
例 echo"The date is `date`"
(2)expr 命令:用于求值算数表达式
例 expr 4+5   输出9
(3)可以在$((...))中包括一个表达式
test n1 -参数 n2        真返回0 假返回1
参数:
-lt 小于
-le 小于等于
-gt 大于
-ge 大于等于
-eq 等于
-ne 不等于
test语句的等价形式[1 -lt 4]=test 1 -lt 4
3.文件测试
-f 存在且是普通文件
-d 存在且是目录
-s 存在且字节数大于0
-r 存在且可读
-w 存在且可写
-x 存在且可执行
4.字符串测试
test -z s   字符串长度为0 则为真
test -n s   字符串长度不为0 则为真
5.其它参数:-a 并且
            -o 或者








case语句范例:
#!/bin/bash
read key 
case  "${key}"in
 [A-Z] ) echo "UpperLetter";;
 [a-z] ) echo "LowerLetter";;
 [0-9] ) echo "Number";;
 *     ) echo "Unkown";;
esac


(read 变量1 [变量2...]
可以从键盘上读取多个变量的值,用户输入数据时,以空格或者Tab键作为分隔


判断存在文件/目录
#!/bin/bash
DIR="/home/Shell"
FILE="/home/Shell/ab.c"
if [ -d ${DIR} ]; then
echo ${DIR}
fi
if [ -f ${FILE} ]; then
echo ${FILE}
fi


或者#!/bin/bash
fname=/bin/date
if(test -f "$fname") then
echo "exist"
fi




while语句  -求1-100的和
i=1
sum=0
while[ $i -le 100 ]
do
sum=$[$sum+$i]
i=$[$i+1]
done
echo $sum




编写一个名为greet的问候程序,执行时能根据系统当前的时间向用户输出问候信息
#! /bin/sh -
hour=`date|cut -c 19-20`
if test $hour -ge 0 -a $hour -lt 12; then
echo "Good morning!"
elif test $hour -ge 12 -a $hour -lr 18; then
echo "Good afternoon!"
else
echo "Good evening!"
fi
说明:用cut命令从date命令的输出中切割出小时信息
-c x-y 表示切割x-y列






编写一个名为chname的程序,将当前目录下所有的.txt 文件更名为.doc 文件
 #! /bin/sh -
for file in *.txt
do
  leftname=`basename $file .txt`
  mv $file $leftname.doc
done






编写一个名为chuser的程序,执行中每隔5分钟检查指定的用户是否登录系统,用户名从命令行输入;如果指定的用户已经登录,则显示相关信息。 
#! /bin/sh –
 if test $# -ne 1
 then
   echo "Usage: chuser username"
 else
   user="$1"
   until who | grep "$user"
   do
    sleep 300
   done
   echo "$user has logged on!"
 fi
原创粉丝点击