Linux系统shell编程的一些例子

总是会忘记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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shell脚本高级编程教程,希望对你有所帮助。 Example 10-23. Using continue N in an actual task: 1 # Albert Reiner gives an example of how to use "continue N": 2 # --------------------------------------------------------- 3 4 # Suppose I have a large number of jobs that need to be run, with 5 #+ any data that is to be treated in files of a given name pattern in a 6 #+ directory. There are several machines that access this directory, and 7 #+ I want to distribute the work over these different boxen. Then I 8 #+ usually nohup something like the following on every box: 9 10 while true 11 do 12 for n in .iso.* 13 do 14 [ "$n" = ".iso.opts" ] && continue 15 beta=${n#.iso.} 16 [ -r .Iso.$beta ] && continue 17 [ -r .lock.$beta ] && sleep 10 && continue 18 lockfile -r0 .lock.$beta || continue 19 echo -n "$beta: " `date` 20 run-isotherm $beta 21 date 22 ls -alF .Iso.$beta 23 [ -r .Iso.$beta ] && rm -f .lock.$beta 24 continue 2 25 done 26 break 27 done 28 29 # The details, in particular the sleep N, are particular to my 30 #+ application, but the general pattern is: 31 32 while true 33 do 34 for job in {pattern} 35 do 36 {job already done or running} && continue 37 {mark job as running, do job, mark job as done} 38 continue 2 39 done 40 break # Or something like `sleep 600' to avoid termination. 41 done 42 43 # This way the script will stop only when there are no more jobs to do 44 #+ (including jobs that were added during runtime). Through the use 45 #+ of appropriate lockfiles it can be run on several machines 46 #+ concurrently without duplication of calculations [which run a couple 47 #+ of hours in my case, so I really want to avoid this]. Also, as search 48 #+ always starts again from the beginning, one can encode priorities in 49 #+ the file names. Of course, one could also do this without `continue 2', 50 #+ but then one would have to actually check whether or not some job 51 #+ was done (so that we should immediately look for the next job) or not 52 #+ (in which case we terminate or sleep for a long time before checking 53 #+ for a new job).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值