Portál AbcLinuxu, 8. května 2025 18:27
#!/bin/bash cert="server.crt" key="server.key" cat >/etc/openvpn/server.conf <<EOF proto udp dev tun port 1194 ca ca.crt cert $cert key $key EOF systemctl restart openvpnOtázkou je, zda to je opravdu dobrý nápad a nešlo by to nějak lépe a jednodušeji.
sed '23s/.*/#&/' /etc/openvpn/server.conf && service openvpn restart &
Je jasne, ze zmeny v tomto confe a restart sluzby moze robit len rootsudo
ale zatial neviem ako pridat do urciteho riadku "#" resp. ako editovat konkretny riadoksed -ire "s/^(řádek)$/#\1/"
+ nejaky sleepProč?
$ line=`cat -n /etc/openvpn/server.conf|grep "search text"|awk '{print $1}'` $ echo "je na riadku: $riadok"
$ chmod 700 comment_and_restart uncomment_and_restartSpustenie:
$ ./comment_and_restart
$ ./uncomment_and_restartSubor service.conf
id=persone name=Unknow last_name=LASTSubor config.php
<?php $path_conf="service.conf"; $search="name=Unknow"; ?>Subor comment_and_restart
#!/usr/bin/php <?php include "config.php"; function comment_in_file($path, $search) { /* * Read file */ /* read file as "C array" */ $file=@file($path); if($file === false) { fputs(STDERR, "Error open/read file '$path'\n"); exit(1); } // print_r($file); // vypis na overenie /* * Comming in memory */ $count=count($file); for($a=0;$a<$count; $a++) if(strpos($file[$a], $search) !== false) { if($file[$a][0] != "#") $file[$a]= "#".$file[$a]; else fputs(STDERR, "Warning: Uncomment line $a in '$path'\n"); // break; # uncomment this, if only first searched line } /* * Write from memory to file */ if(file_put_contents($path, $file) === false) { fputs(STDERR, "Error open/write file '$path'\n"); exit(1); } } comment_in_file($path_conf, $search); sleep(2); system("systemctl restart openvpn"); ?>Subor uncomment_and_restart
#!/usr/bin/php <?php include "config.php"; function uncomment_in_file($path, $search) { /* * Read file */ /* nacita pole ako "C array" */ $file=@file($path); if($file === false) { fputs(STDERR, "Error open/read file '$path'\n"); exit(1); } // print_r($file); // vypis na overenie /* * Uncomment in memory */ $count=count($file); for($a=0;$a<$count; $a++) if(strpos($file[$a], $search) !== false) { if($file[$a][0] == "#") $file[$a]= substr($file[$a], 1); else fputs(STDERR, "Warning: Uncomment line $a in '$path'\n"); // break; # uncomment this, if only first searched line } /* * Write from memory to file */ if(file_put_contents($path, $file) === false) { fputs(STDERR, "Error open/write file '$path'\n"); exit(1); } } uncomment_in_file($path_conf, $search) sleep(2); system("systemctl restart openvpn"); ?>
PHP není C, proto je generování chybových hlášek zbytečné a ty zavináče před file() takéNie je. Ale je s nim dost podobny. ... Da sa aj povedal "super C" (pokial viete C). ... A ano. Pouzil som tento pristup, lebo je najlahsi na pochopenie. Pre nezainteresovaneho.
oužíváš cyklus for tam, kde patří foreach - soubor není pole řádek, ale seznam řádekAj tak interne sa musi pouzit nejake for. Jednoduchost. A ulahcuje mi to zmenu riadku. Lebo napr. toto nefunguje:
<?php $array=array("1","2","3","4"); foreach($array as $line) if($line == "3") { echo "set 'X' for value '$line'\n"; $line="X"; } print_r($array); ?>vystup:
set 'X' for value '3' Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )Vdaka za konstr. kritiku.
Máš to rozstrkané ve třech souborech, přitom by stačil jeden parametrizovanýPre jednoduchost. ... Logicku funkcnost si moze sam dat do 1 suboru, alebo napisat. Lahsie napisat "./bla" ako "./rob bla".
Zapomínáš psát složené závorky. Je to sice jen kosmetická vada, ale časem se ti to vymstíAk je 1 podmienka, nepisem ju - moj programatorsky styl.
foreach ($array as &$line)
se už bude chovat správně. Jenže když to chceš mít rychlejší, tak je obvykle výhodnější generovat nový seznam.
<?php $array = array("1", "2", "3", "4"); $output = array(); foreach ($array as $line) { if ($line == "3") { $line="X"; } $output[] = $line; } print_r($output);Jenže PHP umí jít ještě dále:
<?php $array = array("1", "2", "3", "4"); $komentuj = function ($line) { return ($line == "3") ? "X" : $line; }; print_r(array_map($komentuj, $array));
sed -i -e ' /#NastaveniKtereChciMenit/ s/No/Yes/ /#NastaveniKtereChciMenit/ s/^#// /^NastaveniKtereChciTakyMenit/ s/^/#/ /^DalsiNastaveniKtereChciMenit/ s/bila/cerna/ ' /etc/MojeSluzba/konfigurak
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.