LinuxSir.Org  
| 网站首页 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
置顶的主题 精华主题  
主题工具
旧 03-09-08, 15:56 第 46 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

标题: 一个用阿拉伯数字转换中文大写的脚本(2)[转]


感谢作者: lvgq2001
来自: www.chinaunix.net
代码:
#!/bin/ksh # Program Name : Num2Chn.sh # Programmer : 吕永辉(仙桃市信用联社) # 首先判断输入的是否为数字 printf "%.2f" $1 >/dev/null 2>&1 3>&1 || { echo "输入非法!!!";exit } # 定义数字数组 Num[0]="零" Num[1]="壹" Num[2]="贰" Num[3]="叁" Num[4]="肆" Num[5]="伍" Num[6]="陆" Num[7]="柒" Num[8]="捌" Num[9]="玖" # 定义金额单位数组 Unit[1]="分" Unit[2]="角" Unit[3]="元" Unit[4]="拾" Unit[5]="佰" Unit[6]="仟" Unit[7]="万" Unit[11]="亿" # 处理负数的情况(红字) [ `echo $1 | grep "-"` ] && { NumStr=`echo $1 | sed 's/^.//'` RedFlag="(红)" } || { NumStr=$1 RedFlag="" } # 初始化输入数字数组 i=1 for TmpC in `printf "%.2f" $NumStr | awk -F "." '{print $1$2}' | sed 's/./& /g'` do Nums[$i]=$TmpC i=`expr $i + 1` done j=${#Nums[@]} # 为循环计数变量附初值为输入数字的长度 k=1 # 为循环定位变量附初值(用于确定金额单位) ChnNum="" # 初始化大写金额字符串 while [ $j -eq 0 ] && break [ $k -gt 11 ] && { ChnNum=${Num[${Nums[$j]}]}${Unit[`expr $k - 8 `]}$ChnNum j=`expr $j - 1` k=`expr $k + 1` continue } [ $k -gt 7 -a $k -lt 11 ] && { ChnNum=${Num[${Nums[$j]}]}${Unit[`expr $k - 4 `]}$ChnNum j=`expr $j - 1` k=`expr $k + 1` continue } ChnNum=${Num[${Nums[$j]}]}${Unit[$k]}$ChnNum do j=`expr $j - 1` k=`expr $k + 1` done ChnNum=`echo $RedFlag$ChnNum | sed 's/零分/整/' | sed 's/零角/零/g' \ | sed 's/零拾/零/g' | sed 's/零佰/零/g' | sed 's/零仟/零/g'\ | sed 's/零整/整/' | sed 's/零零零零万/零/'` # 下面的循环用于去掉字符串中连续的零 while [ `echo $ChnNum | grep "零零"` ] || { ChnNum=`echo $ChnNum | sed 's/零元/元/'| sed 's/零万/万/' \ | sed 's/零亿/亿/' | sed 's/^元//' | sed 's/^零//' | sed 's/^整$/零元&/` break } do ChnNum=`echo $ChnNum | sed 's/零零/零/g'` done echo $ChnNum
(调试环境:SCO OpenServer 5.0.5 、ksh )
  KornLee 当前离线   回复时引用此帖
旧 03-09-09, 21:15 第 47 帖
jyh
 
jyh 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 113
  精华: 0
 

如果在控制台下没有中文平台,因为local是中文的,所以会出现乱码,在用户目录下的.bashrc文件加上下面一行,可以自动判断是否是控制台,是的话,会把local设为en,可以防止出现乱码,在X下还是中文local,和平常一样。
代码:
for tty in /dev/tty[1-6];do test `tty` = $tty&&LANG=en;done

此帖于 03-09-09 22:49 被 KornLee 编辑.
  jyh 当前离线   回复时引用此帖
旧 03-09-09, 21:17 第 48 帖
jyh
 
jyh 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 113
  精华: 0
 

一个脚本,用来方便的启动停止一些常用服务,基于对话框的.
代码:
#!/bin/bash #echo server manage #echo smsg() { dialog --msgbox " $1 start sucessful" 5 50 } tmsg() { dialog --msgbox " $1 stop sucessful" 5 50 } emsg() { dialog --msgbox " something erro " 5 50 } ##启动服务 start(){ exno=0 while [ $exno -eq 0 ];do dialog --stdout --ok-label "start" --help-button --help-label "exit" --cancel-label "back" --menu "start server" 0 0 6 1 apache 2 sendmail 3 mysqld 4 wine 5 proftpd 6 sshd >/tmp/dialog_001.tmp exno=$? key=`cat /tmp/dialog_001.tmp` echo "nothing">/tmp/dialog_001.tmp if [ $exno -eq 1 ];then main fi if [ $exno -eq 2 ];then exit 0 fi case $key in [1])httpd -k start&&smsg "apache"||emsg;; [2])/etc/init.d/sendmail start&&smsg "sendmail"||emsg;; [3])/etc/init.d/mysqld start&&smsg "mysqld"||emsg;; [4])/etc/init.d/wine start&&smsg "wine"||emsg;; [5])proftpd&&smsg "proftpd"||emsg;; [6])/etc/init.d/sshd start&&smsg "sshd"||emsg;; *)test esac done } ##停止服务 stop(){ exno=0 while [ $exno -eq 0 ];do dialog --stdout --ok-label "stop" --help-button --help-label "exit" --cancel-label "back" --menu "stop server" 0 0 6 1 apache 2 sendmail 3 mysqld 4 wine 5 proftpd 6 sshd >/tmp/dialog_001.tmp exno=$? key=`cat /tmp/dialog_001.tmp` echo "nothing">/tmp/dialog_001.tmp if [ $exno -eq 1 ];then main fi if [ $exno -eq 2 ];then exit 0 fi case $key in [1])httpd -k stop&&tmsg "apache"||emsg;; [2])/etc/init.d/sendmail stop&&tmsg "sendmail"||emsg;; [3])/etc/init.d/mysqld stop&&tmsg "mysqld"||emsg;; [4])/etc/init.d/wine stop&&tmsg "wine"||emsg;; [5])killall proftpd&&tmsg "proftpd"||emsg;; [6])/etc/init.d/sshd stop&&tmsg "sshd"||emsg;; *)test esac done } ##主函 main(){ exno=0 dialog --stdout --ok-label "start" --cancel-label "stop" --help-button --help-label "exit" --menu "this will start or stop some of your sevice" 4 50 0 "" "" exno=$? case $exno in 0)start;; 1)stop;; *)test esac } main

此帖于 03-09-09 22:50 被 KornLee 编辑.
  jyh 当前离线   回复时引用此帖
旧 03-09-09, 21:18 第 49 帖
jyh
 
jyh 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 113
  精华: 0
 

用来方便的启动停止一些常用服务,基于X的。
#!/bin/bash
#echo server manage
#echo

smsg()
{
kdialog --msgbox "$1 启动成功"
}

tmsg()
{
kdialog --msgbox "$1 停止成功"
}

emsg()
{
kdialog --error "出错 "
}

start(){
exno=0
while [ $exno -eq 0 ];do
kdialog --menu "启动服务" 1 apache 2 sendmail 3 mysqld 4 wine 5 proftpd 6 sshd >/tmp/dialog_001.tmp
exno=$?
key=`cat /tmp/dialog_001.tmp`
echo "nothing">/tmp/dialog_001.tmp
if [ $exno -eq 1 ];then
main
fi
if [ $exno -eq 2 ];then
exit 0
fi
case $key in
[1])httpd -k start&&smsg "apache"||emsg;;
[2])/etc/init.d/sendmail start&&smsg "sendmail"||emsg;;
[3])/etc/init.d/mysqld start&&smsg "mysqld"||emsg;;
[4])/etc/init.d/wine start&&smsg "wine"||emsg;;
[5])proftpd&&smsg "proftpd"||emsg;;
[6])/etc/init.d/sshd start&&smsg "sshd"||emsg;;
*)test
esac
done
}

stop(){
exno=0
while [ $exno -eq 0 ];do
kdialog --menu "停止服务" 1 apache 2 sendmail 3 mysqld 4 wine 5 proftpd 6 sshd >/tmp/dialog_001.tmp
exno=$?
key=`cat /tmp/dialog_001.tmp`
echo "nothing">/tmp/dialog_001.tmp
if [ $exno -eq 1 ];then
main
fi
if [ $exno -eq 2 ];then
exit 0
fi
case $key in
[1])httpd -k stop&&tmsg "apache"||emsg;;
[2])/etc/init.d/sendmail stop&&tmsg "sendmail"||emsg;;
[3])/etc/init.d/mysqld stop&&tmsg "mysqld"||emsg;;
[4])/etc/init.d/wine stop&&tmsg "wine"||emsg;;
[5])killall proftpd&&tmsg "proftpd"||emsg;;
[6])/etc/init.d/sshd stop&&tmsg "sshd"||emsg;;
*)test
esac
done
}


main(){
exno=0
kdialog --yesnocancel "启动服务/停止服务/退出程序"
exno=$?
case $exno in
0)start;;
1)stop;;
*)test
esac
}

main
  jyh 当前离线   回复时引用此帖
旧 03-09-09, 21:19 第 50 帖
jyh
 
jyh 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 113
  精华: 0
 

一个基于对话框的进度条,没实际作用。
function count (){
i=0
while [ $i -lt 100 ]
do echo $i&&sleep 0.1&&i=`expr $i + 1`
done
}
count |dialog --gauge "进度" 12 50
  jyh 当前离线   回复时引用此帖
旧 03-09-09, 21:21 第 51 帖
jyh
 
jyh 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 113
  精华: 0
 

让scroll lock指示灯闪烁,可以起提醒作用,没人会用tty19吧?
#!/bin/bash
#email:jyhln@163.com
#msn:jyhln@msn.com
#oicq:2899589
if [ $# != 1 ];then
echo usage :$0 time
exit 0
fi
n=1
#sleep $1&&let "n=0"&
while [ $n -le $1 ]
do
n=`expr $n + 1`
setleds -L +scroll < /dev/tty19
#setleds -L -caps < /dev/tty19
sleep 0.5
setleds -L -scroll < /dev/tty19
#setleds -L +caps < /dev/tty19
sleep 0.5
done
#setleds -L -caps < /dev/tty19
  jyh 当前离线   回复时引用此帖
旧 03-09-09, 21:22 第 52 帖
jyh
 
jyh 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 113
  精华: 0
 

有时候会下载好多文件,知道有重复的,但不知道是那些。下面的脚本可以找出当前目录或指定目录下所有大小相等的文件,然后配合后面两个脚本比较二进制文件。

#!/bin/bash
#email:jyhln@163.com
#msn:jyhln@msn.com
#oicq:28995895
echo -n>/tmp/result_001.tmp
echo -n>/tmp/result.tmp
if [ $# -eq 0 ];then
dir_t=`pwd`
else
dir_t=`pwd $@`
fi
ls -Rlp -o --full-time $dir_t>/tmp/filelist_001.tmp
#create tmp file

flag=100

for line in `cat /tmp/filelist_001.tmp`;do
#path
if [ "`echo $line|grep ^/|grep :$`" ];then
flag=100
dir_swap=$line
continue
fi

#size
if [ "`echo $line|grep ^[-s][r-][-w][-x][-r]`" -a $flag -gt 10 ];then
flag=2
fi

flag=` expr $flag + 1 `
if [ $flag -eq 6 ];then
size=$line
continue
fi
#file
if [ $flag -eq 10 ];then
flag=100
echo -e $"$size \t$dir_swap\b/$line">>/tmp/result_001.tmp
#echo -e $"$size \t$dir_swap $line"
fi

done

#if have the same size

for byte in `cut /tmp/result_001.tmp -f 1`
do
counter=`grep -w ^"$byte" /tmp/result_001.tmp|wc -l`

if [ $counter -gt 1 ];then
test_n=`grep ^"$byte " /tmp/result.tmp`
if [ ! "$test_n" ];then
grep ^"$byte " /tmp/result_001.tmp>>/tmp/result.tmp
echo>>/tmp/result.tmp
fi

fi
done

cat /tmp/result.tmp
rm -f /tmp/result.tmp /tmp/filelist_001.tmp /tmp/result_001.tmp
  jyh 当前离线   回复时引用此帖
旧 03-09-09, 21:23 第 53 帖
jyh
 
jyh 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 113
  精华: 0
 

下面的脚本简略判断二进制文件是否相同,只采样一次,要修改采样位置大小,只能修改脚本。
#!/bin/bash
#email:jyhln@163.com
#msn:jyhln@msn.com
#oicq:28995895
#hexdump -x -n 16 -s 100
n=16 ##采样大小
s=200 ##采样位置

if [ ! $# = 2 ];then
echo usage: $0 hexfile1 hexfile2
exit 0
fi

hex1=`hexdump -x -n $n -s $s $1`
hex2=`hexdump -x -n $n -s $s $2`
if [ "$hex1" != "$hex2" ];then
echo different files
fi

下面的脚本比较两个二进制文件
#!/bin/bash
#email:jyhln@163.com
#msn:jyhln@msn.com
#oicq:28995895
#hexdump -x -n 16 -s 100

if [ ! $# = 2 ];then
echo usage: $0 hexfile1 hexfile2
exit 0
fi

hexdump -x $1>/tmp/hexdiff_001.tmp
hexdump -x $2>/tmp/hexdiff_002.tmp
diff /tmp/hexdiff_001.tmp /tmp/hexdiff_002.tmp
  jyh 当前离线   回复时引用此帖
旧 03-09-09, 21:23 第 54 帖
jyh
 
jyh 的头像
 
 
注册会员  
  注册日期: Sep 2002
  帖子: 113
  精华: 0
 

下面的脚本是一个简单的rpm安装,基于X的。
#!/bin/bash
#email:jyhln@163.com
#msn:jyhln@msn.com
#oicq:28995895
if [ $# != 1 ];then
echo usage: $0 file.rpm
exit 0
fi

function my_install(){
kdialog --msgbox "install $1......"&
rpm -ihv $1 2>/tmp/rpm_error_log
rpm_exno=$?
if [ $rpm_exno -eq 0 ];then
killall kdialog&&kdialog --msgbox "sucsess"
elif grep "is already installed" /tmp/rpm_error_log
then
kdialog --yesno "`grep "is already installed" /tmp/rpm_error_log`,updata?"
if [ $? -eq 0 ];then
rpm -Uhv $1 2>/tmp/rpm_error_log
rpm_exno=$?
if [ $rpm_exno -eq 0 ];then
killall kdialog&&kdialog --msgbox "sucsess"
else
killall kdialog&&kdialog --error "`cat /tmp/rpm_error_log`"
fi
else
killall kdialog
exit 0
fi
else
killall kdialog&&kdialog --error "`cat /tmp/rpm_error_log`"
fi
rm -f /tmp/rpm_error_log 2>/dev/null
}

kdialog --yesno "this will install $1,continue?"
sele=$?
case $sele in
0)my_install $1;;
1)test;;
*)test
esac
  jyh 当前离线   回复时引用此帖
旧 03-09-09, 22:59 第 55 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

多谢jyh兄
以后发帖时注意用
代码:
代码
的方式,这样便于阅读
  KornLee 当前离线   回复时引用此帖
旧 03-09-10, 18:38 第 56 帖
777
 
777 的头像
 
 
已封禁  
  注册日期: Jun 2003
  我的住址: 中国
  帖子: 990
  精华: 6
 

一个找字符的脚本

作者:777

源码
-----------------------------------------------------------------
#!/usr/local/bin/bash
#A bash script to find a keyword.
#Name findkey
while true;do
echo "Input directory: ( Will exit if you press e ! ) "
read dir
if [ $dir = "e" ];then echo "The process already exit !";exit 0;fi
if [ -e $dir ];then
echo -n "Input keyword: "
read "key"
grep -R "$key" $dir 2>/dev/null|less
else "The directory is not exist ! ";fi
done
#祝大家中秋节快乐~~~~~
------------------------------------------------------------------


此帖于 03-09-10 18:41 被 777 编辑.
  777 当前离线   回复时引用此帖
旧 03-09-11, 13:20 第 57 帖
777
 
777 的头像
 
 
已封禁  
  注册日期: Jun 2003
  我的住址: 中国
  帖子: 990
  精华: 6
 

一个改变系统启动运行等级的脚本,

作者:777

# cat chlevel
-----------------------------------------------------------
#!/bin/bash
# change the run level at the boot time.
#time :2003.8.5
grep id /etc/inittab
echo "Are you want change the runlevel at the boot ? (y/n) "
read num
if [ $num = "y" ];then
if [ -e /etc/inittab ]
then echo "Input a number for runlevel at system boot:"
read level
if [[ $level = ^[0-9] || ${#level} > 1 ]]
then echo "The number is wrong."
else
if [[ $level >0 && $level <6 ]]
then cat /etc/inittab|sed 's/id:[12345]:in/id:'$level':in/'>h&&cat h>/etc/inittab
rm -fr h&&chmod 644 /etc/inittab
else echo "The number is wrong!"
fi;fi
else echo "File not found!"
fi;else echo "The run level have not change!"
fi
grep id /etc/inittab
---------------------------------------------------------------
  777 当前离线   回复时引用此帖
旧 03-09-11, 15:26 第 58 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

引用:
最初由 777 发表
一个改变系统启动运行等级的脚本,
呵呵,我也来一个图形界面的;)
代码:
[/home/javalee/myshell]cat chlevel #!/bin/ksh #name:chlevel # file=/etc/inittab title="脚本:chlevel" oldlevel=$(runlevel|cut -c3) info="当前运行级别:$oldlevel\n请输入启动级别[1-5][按q键离开]" id=$(whoami) function error { xdialog --title $title --no-buttons --infobox "错误!" 6 30 } function finish { xdialog --title $title --no-buttons --infobox "启动级别修改完毕,系统将重启" 6 30 reboot } function quit { xdialog --title $title --no-buttons --infobox "离开本程序!" 6 30 } xdialog --title "身份验证" --no-cancel --inputbox "请输入用户名" 6 30 2>p$$ p=$(cat p$$) if [[ $p != $id ]] then xdialog --infobox "$p:为非法用户!退出!!!" 6 30 exit 1 fi while : do xdialog --title $title --no-cancel --inputbox "$info" 10 36 2>tmp$$ input=$(cat tmp$$) case $input in 1|2|3|4|5) vi -e -s -c ":%s/id:$oldlevel:init/id:$input:init/" -c ":wq!" $file finish exit 0;; q) quit break;; *) error continue;; esac done rm tmp$$ p$$
xdialog可以用系统本身的dialog来代替.

此帖于 03-09-11 17:04 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
旧 03-09-11, 20:08 第 59 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

标题: 一个比较两个文件的脚本[转]


作者:bjgirl
来自:www.chinaunix.net
代码:
cat dfile #!/bin/ksh #scriptname:dfile function Usage { echo "Usage: dfile [-x|-y|-z] file1 file2" } (($# != 3 )) && { Usage; exit 1; } for i in $(cat $2);do for j in $(cat $3);do echo $i $j done done>a$$ same=$(awk '$1==$2 {print $1}' a$$) X=$(echo 两个文件相同的行是: echo $same|tr ' ' '\n') diff1=$(awk '$1 != $2 {print $1}' a$$|uniq -d ) Y=$(echo "文件$2中存在而文件$3中不存在的行是:" echo $same $diff1|tr ' ' '\n'|sort|uniq -u echo "\n") for n in $(cat $3);do for m in $(cat $2);do echo $n $m done done>b$$ diff2=$(awk '$1 != $2 {print $1}' b$$|uniq -d ) Z=$(echo "在文件$3中存在而文件$2中不存在的行是:" echo -n $diff2 $same|tr ' ' '\n'|sort|uniq -u echo "\n") while getopts :xyz: arg do case $arg in x) echo $X|tr ' ' '\n';; y) echo $Y|tr ' ' '\n';; z) echo $Z|tr ' ' '\n';; \?) echo "选项错误!!!";Usage;; esac done rm a$$ b$$
  KornLee 当前离线   回复时引用此帖
旧 03-09-20, 15:23 第 60 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

标题: 一个定时*出提示窗口的脚本


代码:
[/home/javalee/myshell]cat hello #!/bin/ksh #脚本名:hello #描述:定时提醒用户是否该休息啦.....:-} #作者:javalee #日期:2003/9/20 function _time { n=1 while ((n<600)) do sleep 1 ((n+=1)) done } while true do _time info="$USERNAME\n你该休息休息啦~~ :) " tishi="提示信息" xdialog --title $tishi --beep --msgbox $info 10 10 xdialog --title $tishi --no-buttons --beep --inputbox "休息吗[y/n]?" 4 20 2>tmp$$ input=$(cat tmp$$) case $input in y) break ;; n) continue;; *) xdialog --title $tishi --no-buttons --infobox "错误的选择!" 4 20;continue;; esac rm tmp$$ done
xdialog可用系统自身的dialog代替

此帖于 03-09-20 16:08 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 12:21


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2012, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2011, LinuxSir.Org