コンテンツへスキップ

・コマンド結果を変数にセット

;--------------------;
; SetHostName.ttl
; コマンド結果を変数に格納 ;
;--------------------;
sendln 'hostname'
recvln
recvln
HostName=inputstr
wait '$' '#'

messagebox HostName 'ホスト名を変数にセット'

・文字列比較

;--------------------------;
; 文字列比較                ;
; strcompare               ;
; <string1> < <string2>	-1 ;
; <string1> = <string2>	0  ;
; <string1> > <string2>	1  ;
;--------------------------;
; 変数(HostName)にサーバ名をセットする。
include '.\SetHostName.ttl'

; コマンド結果を変数に格納
sendln 'cat /etc/redhat-release'
recvln
recvln
OsVersion=inputstr
wait '$' '#'

; 文字列比較
strcompare OsVersion 'CentOS release 6.10 (Final)'
if result = 0 then
    Contents =  'centos 6.10' 
    Kekka = 'OK'
else
    Contents = 'not centos 6.10' 
    Kekka = 'NG'
endif

; メッセージボックスの作成
; messagebox <メッセージ> <タイトル> <1の場合は改行出来る>
MESSAGE = 'ホスト名:['
strconcat MESSAGE HostName
strconcat MESSAGE ']\nOSバージョン:['
strconcat MESSAGE Contents
strconcat MESSAGE ']'

TITLE = '結果:['
strconcat TITLE Kekka
strconcat TITLE ']'

messagebox MESSAGE TITLE 1

・配列

;------;
; 配列 ;
;------;
;配列の要素数をセット
CountCommand = 3
strdim com CountCommand

com[0] = 'uname -a'
com[1] = 'echo $(date)'
com[2] = 'pwd'

for i 0 CountCommand - 1
    ; コマンド実行
    sendln com[i]
    recvln
    recvln
    ; コマンド結果を変数に格納
    Ret=inputstr
    wait '$' '#'
    messagebox Ret 'コマンド結果'
next

 

指定したディレクトリを再帰的にlsし、
ファイルをファイルサイズの降順に表示する。

#!/usr/bin/perl
#
use strict;

my @array = ();
my $tmp;
my $rankedFile;

my $dir = shift @ARGV;
my $length = shift @ARGV;
if (!(defined($dir))) {
    print("Please specify the dir.\n");
    exit;
}
if (!(defined($length))) {
    print("Please specify the ranking.\n");
    exit;
}

# Ranking初期化
my $i = 0;
while($length > $i){
    push(@array, '0,-');
    $i++;
}

sub reflexiveFile{
    my $dir = shift;
    my @list = ();

    opendir(DIR, $dir) or die("Can not open directory:$dir ($!)");
    @list = readdir(DIR);
    closedir(DIR);

    foreach my $file ( sort @list){
        next if ($file =~ /^\.{1,2}$/ );
        next if ( -l "$dir/$file");
        if( -d "$dir/$file" ){
            reflexiveFile("$dir/$file");
        } else {
            my $fs = -s "$dir/$file";
            my $f = "$fs,$dir/$file";
            next if(getFileSize($array[0]) >= $fs);
            ranking($f);
        }
    }
}

sub ranking{
    $array[0] = shift;

    for ( my $i = 1; $i < $length;$i++){
        $tmp = $i;
        $rankedFile = $array[$i]; # Ranking[$i]のファイル
        while( ($tmp > 0 ) and ( getFileSize($array[$tmp - 1]) > getFileSize($array[$i]) ) ){
            $array[$tmp] = $array[$tmp - 1];
            $tmp = $tmp - 1;
        }
        $array[$tmp] = $rankedFile;
    }
}

sub getFileSize{
    my @sn = split(/,/,shift);
    return $sn[0];
}

sub getFileName{
    my @sn = split(/,/,shift);
    return $sn[1];
}

sub print_array{
    @array = @_;
    @array = sort {$b<=>$a} @array;
    for (my $j=0; $j < $length; $j++){
            my $size = getFileSize($array[$j]);
            my $name = getFileName($array[$j]);
            print "$size,$name\n";
    }
}

reflexiveFile($dir);
print_array(@array);

シェル

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import sys
import commands

args = sys.argv
argc = len(args)

if (argc < 2):
    print "Usage:\n" +  args[0] + "設定ファイル\" \"プロパティファイル\""
    quit()

CONF_FILE = args[1]
PROP_FILE = args[2]

f = open(PROP_FILE)
lines = f.readlines()
f.close()

for line in lines:
    line = line.strip()

    p = line.split("=")
    prop_title = p[0] + "="
    prop_val = p[1].strip()

    com = "grep \"" + prop_title + "\"" + " " + CONF_FILE
    ret = commands.getoutput(com)

    if ret == "":
        com = "sysctl -a | grep \"" + prop_title + "\""
        ret = commands.getoutput(com)
        com_type = "s"
    else:
        com_type = "f"

    p2 = ret.split("=")
    prop_val_sysctl = p2[1].strip()

    if prop_val == prop_val_sysctl:
        res = "O"
    else:
        res = "X"

    print res + "," + "," + com_type + "," + prop_title + "," + prop_val_sysctl + "," + prop_val

確認したいパラメータを書いたファイル

net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 3
kernel.shmmax = 4
net.ipv6.ip6frag_time = 5

使い方

[root@centos65sono1 SysctlCheck]# ./propCheck.py "/etc/sysctl.conf" "test.txt"
O,,f,net.ipv4.tcp_syncookies =,1,1
O,,f,kernel.msgmnb =,65536,65536
X,,f,kernel.msgmax =,65536,3
X,,f,kernel.shmmax =,68719476736,4
X,,s,net.ipv6.ip6frag_time =,60,5