Category Archives: shell

「shell学習」qmailの大量キューを削除するサンプルコード

参考コード:
#/bin/bash
#ファイルパス
quepath=/var/spool/mqueue
#ファイル数
filenum=`ls $quepath|wc -l`
#ファイルを削除
if [ $filenum -ge 100 ];then
find $quepath -type f -name ‘*’ -print0 | xargs -0 rm
rm -rf $quepath/*
fi

Linuxでshellのif文にスペースとセミコロンの使い方

参考ソースコード

#!/bin/bash

if [ $# = 2 ]; then
echo “inpuT date is:” $1 “,time is:” $2
date -s “$1 $2”
fi

注意:
1.$# = 2等号の後ろにスペースが必要,[]の中と外のスペースが必要。
2.if文にセミコロンの追加必要
追加しない場合、下記エラーメッセージが表示される
syntax error near unexpected token `fi’

「shell」Linuxで日付の処理方法

機能:
20分ごとに3分を増加

1.時間を編集
startnews24.sh
参考コード
echo $(date +”%H:%M” ) > /root/home/timeSyn/startnews24.txt
time1=$(date -d ‘3 minutes’ +”%H:%M” )
echo $time1 > /root/home/timeSyn/startnews241.txt
date -s “$time1”
exit

2. crontab -eを実行,shellにタスクを加える
*/20 * * * * /root/startnews24/startnews24.sh

3.タイミングタスクが再起動
/sbin/service crond restart

bashでshellスクリプトforループのサンプルコード

例1 普通列挙
for i in ‘apple’ ‘meat’ ‘sleep’ ‘girl’
do
echo I like $i
done
結果:
arkgame.com@X:~$ bash for.sh
I like apple
I like meat
I like sleep
I like girl

例2 1+2+3+….100
#!/bin/bash
ans=0
for i in {1..100}
do
let ans+=$i
done
echo $ans

結果
5050.

例3 100以内に全ての奇数の和
for i in {1..100..2}
do
echo $i
done
seq

例4 shellでLANのHostをpingする
#!/bin/bash
PREFIX=192.168.1.
for i in `seq 100 110`
do
echo -n “${PREFIX}$i ”
ping -c5 ${PREFIX}${i} >/dev/null 2>&1
if [ “$?” -eq 0 ];then
echo “OK”
else
echo “Failed”
fi
done
他の書き方
for i in {100..110}
結果:
arkgame.com@X:~$ bash ping.sh
192.168.1.100 Failed
192.168.1.101 Failed
192.168.1.102 OK
192.168.1.103 OK
192.168.1.104 OK
192.168.1.105 OK
192.168.1.106 Failed
192.168.1.107 Failed
192.168.1.108 Failed
192.168.1.109 Failed
192.168.1.110 Failed

例4 1~100の和を計算
#!/bin/bash
ans=0
for ((i=1;i<=100;i++))
do
let ans+=$i
done
echo $ans

bashで始めるシェルスクリプトifとthenを利用するサンプルコード

例1 数字の判断
#!/bin/bash
read -p “数字を入力してください:” a
if [ $a -lt 200 ]
then
echo “a<200” else echo “a>=200”
fi

例2 現在のディレクトリにファイルが存在するかどうかを判断

#!/bin/bash
read -p “ファイル名を入力してください:” name
if [ -e $name ]
then
echo -n “$name存在する,”
if [ -d $name ]
then
echo “ディレクトリである”
else
echo “同じディレクトリではない”
fi
else
echo “$name存在しない”
fi

例3 現在の環境をコマンドにインストールされているかを確認
#!/bin/bash
read -p “コマンドを入力してください:” var
if which $var>/dev/null
then
echo “$var存在”
else
echo “$var存在しない”
fi

シェルスクリプト実行5秒自動的終了コード

参考コード:

#!/bin/bash

#name show_status.sh

#echo $$ > /var/run/show_status.log
#sleep 5 && kill `cat /var/run/show_status.log` &

#start code
echo “welcome to arkgame.com”
#end code

「Linux勉強」shellスクリプト起動サンプルコード

サンプルコード:
#!/bin/bash
export JAVA_HOME=/usr/java
export PATH=$JAVA_HOME/bin:$PATH

#——————————————————————-
# Mb Bootstrap Script
#——————————————————————-
function main()
{
# find Mb home.
CURR_DIR=`pwd`
cd `dirname “$0″`/..
RESV_HOME=`pwd`
cd $CURR_DIR

if [ -z “$RESV_HOME” ] ; then
echo
echo Must set RESV_HOME
echo
exit 1
fi

pc=`ps -ef | grep “ThreadMore $1” | wc -l `
echo “process count:$pc”
if [[ $pc -gt 1 ]];
then
echo “last job havent finish,exit.”
exit 1
fi

execute $1 $2
}

function execute()
{
for i in $RESV_HOME/lib/*.jar; do
CLASSPATH=$i:$CLASSPATH;
done

#echo RESV_HOME=$RESV_HOME

CLASSPATH=$RESV_HOME/conf:$RESV_HOME/smack.jar:$CLASSPATH

DEBUG_INFO=” -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n”
DEBUG=””
if [ “$1” = “load” ]
then
MAIN_CLASS=”www.smack.ThreadLocal $1″;
DEFAULT_OPTS=”-server -Xms10G -Xmx10G ” ;
else
if [ “$1” = “check” ]
then
MAIN_CLASS=”www.smack.ThreadLocal “;
DEFAULT_OPTS=”-server -Xms2G -Xmx2G” ;
else
MAIN_CLASS=”www.smack.ThreadLocal $1 $2″;
DEFAULT_OPTS=”-server -Xms2000m -Xmx2000m -Xss128k” ;
fi
fi
DEFAULT_OPTS=”$DEFAULT_OPTS -Djava.awt.headless=true -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.10.10.7″
DEFAULT_OPTS=”$DEFAULT_OPTS -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=60″
DEFAULT_OPTS=”$DEFAULT_OPTS -DMB.home=\”$RESV_HOME\””

echo java $DEBUG $DEFAULT_OPTS -classpath $CLASSPATH $MAIN_CLASS
java $DEBUG $DEFAULT_OPTS -classpath $CLASSPATH $MAIN_CLASS
}

main “4000” “40”

Linuxでログインしているユーザを判断するスクリプト

操作コマンド:
[devtac@startnews24 shell]$ vi check_user.sh
#! /bin/sh
echo “You are logged in as `whoami`”;
if [ `whoami` != devtac ]; then
echo “Must be logged in as devtac to run this script.”
exit
fi
echo “スクリプトの実行時間: `date`”
実行結果:
[devtac@jz345 shell]$ chmod a+x check_user.sh
[devtac@jz345 shell]$ ./check_user.sh
You are logged in as devtac
スクリプトの実行時間: 2014年 12月 16日 火曜日 18:35:17 CST

10台サーバーhostファイルを修正するスクリプト

スクリプトコード:
#!/bin/bash
echo “enter heno’s password”
read henoPassword
echo “enter root’s password”
read rootPassword

for i in 11 12 13 14 15 16 17 18 19 20 21;
do
ip=”192.168.10.”$i
comand=”ssh -o StrictHostKeyChecking=no heno@$ip”
expect -c ”
set timeout 60;
spawn $comand;
expect {
\”startnews24@$ip’s password:\” {send \”$henoPassword\r\”; exp_continue}
\”startnews24\” {send \”su -\r\”; exp_continue}
\”Password:\” {send \”$rootPassword\r\”; exp_continue}
\”root@\” {send \”sed -i ‘s/192.168.* analysis.xxxx.com/192.168.10.221 analysis.xxxx.com/g’ /etc/hosts\rexit\rexit\r\”; exp_continue}
}

done

shellで実行情報を出力する方法

文法をチェック
sh -n script_name.sh
ログを実行
sh -x script_name.sh

3 / 512345