总是会忘记Linux下的shell编程的一些细节,平时用的少,突然要用的时候又得去查,觉得挺麻烦。所以想起来写下一些小例子,方便自己用的时候查找。这里的内容参考的是Linux程序设计一书,感觉这本书应该很经典,因为它很厚。。。
#!/bin/sh
echo $* #"echo $@",两种方式显示所有的参数
echo $1 #显示第一个参数,第0个参数为运行的脚本,也就是本脚本文件名
my_test="They call me xiaoshidi!!!"
echo $my_test #直接引用值
echo "$my_test" #将值当成字符串
echo '$my_test' #直接输出字符串
echo \$my_test #直接输出字符串
echo Enter some words
read my_test #通过read 读取键盘标准输入
echo '$my_test' now is $my_test #显示测试
for temp in $@ #将 in 后面的参数,逐个赋值给temp;for循环逐个显示
do
echo $temp
done
for temp in $(ls -l) #将 in 后面的参数,逐个赋值给temp;for循环逐个显示,参数取值于指令,空格就会换行
do
echo $temp
done
#if test -f 1.c ;then #如果这里运行报错then后面unexpect,可能是环境问题,ubuntu尝试:sudo apt-get install dos2unix
# echo "1"
#if
#if [ -f 1.c ]
#then
# echo "1"
#if
#其他判断条件
#string1 = string2 #字符串相等为真
#string1 != string2 #字符串不相等为真
#-n string #字符串不为空则真
#-z string #字符串为NULL,空则真
#exp1 -eq exp2 #表达式相等为真
#exp1 -ne exp2 #表达式不相等为真
#exp1 -gt exp2 #表达式1大于表达式2为真
#exp1 -ge exp2 #表达式1大于等于表达式2为真
#exp1 -lt exp2 #表达式1小于表达式2为真
#exp1 -le exp2 #表达式1大于等于表达式2为真
#!exp1
#-d file #文件为目录则真
#-e file #文件存在则真
#-f file #文件为普通文件则真
#-g file #set_group_id位被设置则为真
#-r file #文件可读则真
#-s file #文件大小补位0则真
#-u file #set_user_id位被设置则为真
#-w file #文件可写则真
#-x file #文件可执行则真
#while [ "xiaoshidi" = $1 ] 如果条件为真,会死循环哦
#do
# echo "welcom xiaoshidi"
#done
until [ $value = "demaxiya" ] #与while相反,条件为真则不循环,否则死循环,此外shell好像没有定义变量的概念,直接用了value是之前没定义过,也没有赋值的
# [ "$value" = "$my_test" ] 也可
do
echo "read value...$value" #一旦条件为真则不执行,直接结束循环
read value
done
echo "xiaoshidi need money!!!Will you ready to give xiaoshidi money?"
read i_do
case "$i_do" in #i_do接收输入后,case将逐个比较,第一行通过"|"允许了多个肯定
yes|hao|OK|ok ) echo "lao tie ,666";;
no|chedan|gunduzi|he*|*wocao* ) echo "see you~";; #多个否定外加*做通配
* ) echo "I have no word to say!";; #相当于default:,默认的结果
esac
#条件中的逻辑运算
if [ $i_do = "yes" ] || [ $i_do = "hao" ] || [ $i_do = "OK" ] || [ $i_do = "ok" ] || echo "666";then
echo "Thanks!!!"
fi
a=1
b=2
c= expr $a + $b + 3
echo $c
exit 0