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
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