免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

sh/bash/dash/ksh/zsh等Shell脚本
头像
lxf1992521
帖子: 240
注册时间: 2011-06-26 18:28
联系:

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】

#31

帖子 lxf1992521 » 2013-11-23 22:29

best1196 写了:
susbarbatus 写了:
best1196 写了:lz大神你好,有个问题想请教一下, :em76

----shell script sh1.sh---

代码: 全选

#! /bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH     
echo -e "You should input 2 integers\n" #问题代码1
read -p "first integer:" first
read -p "second integer:" second
total=$(($first * $second))
echo -e "\nThe result is : $total"  #问题代码2
----shell script sh1.sh----------

我的linux是ubuntu 10.11,执行sh sh1.sh如下:

-e You should input 2 integers

first integer:2
second integer:6
-e
The result is : 12

echo完了之后参数-e也跟着输出来了,我现在想不想将这个-e显示,有什么方法吗?
直接拷下来跑了一下,没这种问题……
你的 sh 是什么版本……
试试用 bash sh1.sh
----------------------------------------------------------------
用bash sh1.sh 确实可以用,但是用 sh sh1.sh 还是不能。
至于你说的查看sh 的版本,我不知道怎么查,但我把 /bin/ 下的一些文件找出来了。

----------------------------------------
root@yx:/tmp/script# ls -l /bin/*sh
-rwxr-xr-x 1 root root 916692 2011-05-18 17:54 /bin/bash
-rwxr-xr-x 1 root root 96188 2011-05-03 23:01 /bin/dash
lrwxrwxrwx 1 root root 4 2013-07-31 14:37 /bin/rbash -> bash
lrwxrwxrwx 1 root root 4 2013-07-31 14:37 /bin/sh -> dash
lrwxrwxrwx 1 root root 7 2013-07-31 14:37 /bin/static-sh -> busybox
---------------------------------------------------------------------------------------------
sh 连接到 dash 去了,难怪会这样。
多谢。 :em42
很多新手出问题都在于:写脚本时写了魔法数字,但是运行时有用”sh“来运行,导致魔法数字没有用了,这点必须注意!
另外,Ubuntu的sh与其他Linux系统不一样,它是dash的符号链接,没有bash的一些完美的特性,注意!!!
头像
lxf1992521
帖子: 240
注册时间: 2011-06-26 18:28
联系:

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】

#32

帖子 lxf1992521 » 2013-11-24 22:48

代码: 全选

#!/bin/bash
# 本脚本用于备份 /var/cache/apt/archives 目录下的所有deb缓存包到指定目录,并将该目录下的
#+的包替换成备份目录的符号链接;
# 时间:2013年 11月 23日 星期六 22:39:52 CST

# directory of resource and target
resource_dir="/var/cache/apt/archives"
target_dir="/media/FSF/archives/archives-11.04"

# function for backuping the deb package and linking it;
backup_deb(){
	if [ -d $resource_dir ]; then
		cd $resource_dir || exit
		ls *.deb 2> /dev/null | while read deb; do
			[ ! -L $deb ] && sudo mv $deb $target_dir
		done
	else
		echo "  >> deb包文件移动失败!..."
		exit
	fi
}

link_deb(){
	ls $target_dir/*.deb | while read deb; do
		basename_deb=$(basename $deb)
		[ ! -L $resource_dir/$basename_deb ] && sudo ln -s $deb $resource_dir
	done
}

# body
[[ -d $target_dir ]] || sudo mkdir -p $target_dir
backup_deb
link_deb

echo "  >> successful work!"
头像
hybeam
帖子: 2
注册时间: 2013-04-29 10:08
系统: windows

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#33

帖子 hybeam » 2013-12-05 17:07

楼主你好,能不能帮我写个脚本达成这样的目的:
每个月第一个星期五打开terminal后,会显示一段话。

我没搞过脚本,只是现用现查,打算以后要学。但是这个还是有点急的,所以求大神帮忙,救急。

我自己尝试写了个,是在/etc/bashrc文件的最后加了一个判断

if [ `date +%e`-eq`cal|awk '{print $6}'|grep '[0-9]'|head -1` ];then
/home/user1/notice/shownotice.sh
fi
#shownotice.sh这个脚本就是几行 echo “......”

可是为什么我无论什么时候打开terminal 上面都会显示shownotice.sh 中的内容,判断写错了?还是其他什么原因?
先谢谢楼主了,帮我改、给我个新的方案都行,thank you!
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#34

帖子 susbarbatus » 2013-12-05 17:52

hybeam 写了:楼主你好,能不能帮我写个脚本达成这样的目的:
每个月第一个星期五打开terminal后,会显示一段话。

我没搞过脚本,只是现用现查,打算以后要学。但是这个还是有点急的,所以求大神帮忙,救急。

我自己尝试写了个,是在/etc/bashrc文件的最后加了一个判断

if [ `date +%e`-eq`cal|awk '{print $6}'|grep '[0-9]'|head -1` ];then
/home/user1/notice/shownotice.sh
fi
#shownotice.sh这个脚本就是几行 echo “......”

可是为什么我无论什么时候打开terminal 上面都会显示shownotice.sh 中的内容,判断写错了?还是其他什么原因?
先谢谢楼主了,帮我改、给我个新的方案都行,thank you!
cal|awk '{print $6}'|grep '[0-9]'|head -1 的结果,虽然打印出来是个数字,比如5,但其实是 $'_\b5',
date +%e 拿到的值前面有个空格,
所以 -eq 不适用,加引号用字符串对比也得不到正确结果。
沉迷将棋中……
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#35

帖子 susbarbatus » 2013-12-05 18:11

date +%u 可以打出今天星期几
date +%-d 可以打出前面不带填充的日期
一周的第一个星期五一定小于7号,第二个星期五一定大于7号(对于星期几都是这样)
于是判断条件可以这么写
if [ `date +%-d` -lt 7 ] && [ `date +%u` -eq 5 ];then
echo something...
fi
沉迷将棋中……
头像
lxf1992521
帖子: 240
注册时间: 2011-06-26 18:28
联系:

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#36

帖子 lxf1992521 » 2013-12-06 12:13

susbarbatus 写了:date +%u 可以打出今天星期几
date +%-d 可以打出前面不带填充的日期
一周的第一个星期五一定小于7号,第二个星期五一定大于7号(对于星期几都是这样)
于是判断条件可以这么写
if [ `date +%-d` -lt 7 ] && [ `date +%u` -eq 5 ];then
echo something...
fi
恩,赞一个!! :em11
头像
hybeam
帖子: 2
注册时间: 2013-04-29 10:08
系统: windows

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#37

帖子 hybeam » 2013-12-06 13:18

susbarbatus 写了:date +%u 可以打出今天星期几
date +%-d 可以打出前面不带填充的日期
一周的第一个星期五一定小于7号,第二个星期五一定大于7号(对于星期几都是这样)
于是判断条件可以这么写
if [ `date +%-d` -lt 7 ] && [ `date +%u` -eq 5 ];then
echo something...
fi

我已经用了你的方法,很棒的,非常感谢!我明白了为什么我的方案不能工作,再次感谢你的讲解!
头像
susbarbatus
帖子: 2966
注册时间: 2010-04-10 16:14
系统: Arch Linux

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#38

帖子 susbarbatus » 2013-12-06 13:30

:em06 发现点小问题,不是小于7号,应该是小于等于7号,于是 -le 才是对的,此外把两个判断交换一下效率更高些
if [ `date +%u` -eq 5 ] && [ `date +%-d` -le 7 ]; then
echo something...
fi
沉迷将棋中……
comdodo
帖子: 11
注册时间: 2013-03-30 0:49
系统: win7

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#39

帖子 comdodo » 2013-12-21 14:44

请帮忙写一个rutorrent+ftp的一键安装脚本

参考:http://www.linuxidc.com/Linux/2011-02/32357.htm

现在买了VPS自己安装是个麻烦事
这些一键安装脚本竟然还是老外N年前做的
现在安装报错
头像
lxf1992521
帖子: 240
注册时间: 2011-06-26 18:28
联系:

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#40

帖子 lxf1992521 » 2013-12-21 22:29

comdodo 写了:请帮忙写一个rutorrent+ftp的一键安装脚本

参考:http://www.linuxidc.com/Linux/2011-02/32357.htm

现在买了VPS自己安装是个麻烦事
这些一键安装脚本竟然还是老外N年前做的
现在安装报错


马上要考研了,等考完研我好好研究一下! :em11
ardin
帖子: 39
注册时间: 2007-01-28 16:08

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#41

帖子 ardin » 2014-04-25 15:57

:em04 还有这样的好人,不好好麻烦他一下都不好意思。。

帮忙写一个:判断指定网段中还有没有活的机器,如果没有,就关掉自己。
本机装了arping的,最好还要有Log。
头像
lxf1992521
帖子: 240
注册时间: 2011-06-26 18:28
联系:

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#42

帖子 lxf1992521 » 2014-04-25 20:07

ardin 写了::em04 还有这样的好人,不好好麻烦他一下都不好意思。。

帮忙写一个:判断指定网段中还有没有活的机器,如果没有,就关掉自己。
本机装了arping的,最好还要有Log。
恩,使用arp-scan命令即可,比如:“sudo arp-scan --interface=wlan0 192.168.1.0/24”即可通过无线网络扫描192.168.1.0/24网段是否有活动主机!
具体用法请baidu,或者man手册
ardin
帖子: 39
注册时间: 2007-01-28 16:08

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#43

帖子 ardin » 2014-04-28 14:45

lxf1992521 写了:
ardin 写了::em04 还有这样的好人,不好好麻烦他一下都不好意思。。

帮忙写一个:判断指定网段中还有没有活的机器,如果没有,就关掉自己。
本机装了arping的,最好还要有Log。
恩,使用arp-scan命令即可,比如:“sudo arp-scan --interface=wlan0 192.168.1.0/24”即可通过无线网络扫描192.168.1.0/24网段是否有活动主机!
具体用法请baidu,或者man手册
:em36 :em37
lxf1992521 你是个懒人啊!为什么给best1196兄弟的写得就完整,给我就只一句提示呢?

算了,伟大领袖曾经说过“自力更生,丰衣足食”,"扫帚不到,灰尘照例不会自己跑掉" ,咱自己写一个!

代码: 全选

#!/bin/bash

IPaddr=192.168.1.
ETHX=enp2s0
IPFILE=/tmp/arping.txt
LogFile=/var/log/auto-down.log

# 只扫描 192.168.1.71-192.168.1.250 之间的机器。
for IP in {71..250} 
do
    arping -I $ETHX -c 1 $IPaddr$IP > $IPFILE
    result=$(cat $IPFILE | grep reply)
    if [[ "$result" != "" ]] 
    then
        echo " at `date`, still has machine run." >> $LogFile
        echo $result >> $LogFile
        echo "so Don't Panic." >> $LogFile
        exit 1
    fi 
done

if [[ "$result" == "" ]] 
then
    # 关闭网中的windows 2003 服务器。 
    echo "关闭windows 2003 服务器 -- 192.168.1.62" >> $LogFile
    net rpc shutdown -f -U Administrator%password -I 192.168.1.62                                                                          
    # 注意:现在要关机!!
    echo " at `date`, halt machine." >> $LogFile
    echo " halt!!! I real run THIS command! " >> $LogFile 
    rm $IPFILE
    /sbin/halt -p
fi
注意注意: 此脚本有危险操作,不了解其含义的最好不要运行它。
头像
daf3707
论坛版主
帖子: 12739
注册时间: 2007-06-13 15:57
来自: 在他乡

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#44

帖子 daf3707 » 2014-04-28 14:46

今天才几号,这脚本超前了?
头像
lxf1992521
帖子: 240
注册时间: 2011-06-26 18:28
联系:

Re: 免费写shell脚本,和发布自己用的脚本!【长期有效!】【2014-11-24更新】

#45

帖子 lxf1992521 » 2014-04-28 21:25

:em36 :em37
lxf1992521 你是个懒人啊!为什么给best1196兄弟的写得就完整,给我就只一句提示呢?

算了,伟大领袖曾经说过“自力更生,丰衣足食”,"扫帚不到,灰尘照例不会自己跑掉" ,咱自己写一个!
呃,这个真的没什么技术含量啊!既然如此,我写一下吧:

代码: 全选

#!/bin/bash

# 变量设置
logfile="/var/log/arpscan.log"
net="192.168.1.0/24"

# 函数主体
hostnumber=$( sudo arp-scan --interface=wlan0 $net 2>&1 | sudo tee $logfile | grep "packets received by filter" | sed -r 's/^([0-9])(.*)/\1/' ) 
[ $hostnumber -eq 0 ] && sudo init 0
回复