- Google Pixel topik
- Nem lett arányos a fogyókúra
- Apple iPhone 16 Pro - rutinvizsga
- Csíkszélességben verné az Exynos 2600 a Snapdragon 8 Elite 2-t
- Karaktere biztos lesz az első Nothing fejhallgatónak
- Samsung Galaxy Watch (Tizen és Wear OS) ingyenes számlapok, kupon kódok
- Íme az új Android Auto!
- Samsung Galaxy A55 - új év, régi stratégia
- Motorola Razr 60 Ultra - ez a kagyló könnyen megfő
- iPhone topik
Új hozzászólás Aktív témák
-
Jester01
veterán
Kerülőúton meg lehet azt tenni, hogy a jelszó bekérést a script csinálja és aztán odaadja a grub-mkpasswd-pbkdf2-nek aminek ekkor már semmi kimenete nem kell a terminálra.
read -sp "Enter password: " pass1
echo
read -sp "Reenter password: " pass2
echo
if [ "$pass1" != "$pass2" ]
then
echo "Password mismatch"
exit 1
fi
PASS=$(printf "%s\n%s\n" "$pass1" "$pass2" | grub-mkpasswd-pbkdf2) -
Jester01
veterán
válasz
Speeedfire #1810 üzenetére
Gondolom az awk nem kompatibilis. Nézd meg, van-e gawk mert debianon általában az van.
-
Jester01
veterán
find + ciklus
#!/bin/bash
actday=$(date +"%u")
acthour=$(date +"%k")
find /root/autoscan/objects -type f -name \*.txt |
while read file
do
fileday=$(sed -n 3p "$file")
filehour=$(sed -n 5p "$file")
if [ $actday -eq $fileday ]
then
echo "egyezik"
# tovabbi tennivalok itt
fi
done -
Jester01
veterán
Vagy paste -s
-
-
Jester01
veterán
Ha már shell script topik akkor itt a szokásos megoldásom is
#! /bin/bash
declare -A stats
maxcount=0
while read line
do
tmp=${line#*,*,}
if [ "${tmp:0:2}" != "úr" ]
then
continue
fi
tmp=${tmp#*.*.}
day=${tmp:0:2}
if [ -z "${stats[$day]}" ]
then
count=1
else
count=$((stats[$day] + 1))
fi
stats[$day]=$count
if [[ $count > $maxcount ]]
then
maxcount=$count
maxday=$day
fi
done
echo "$maxday ($maxcount)" -
Jester01
veterán
válasz
ngabor2 #1726 üzenetére
Összedobtam egy kis progit, de nem shell script
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <stdbool.h>
#define ELEMENT char
#define EQUAL(a, b) ((a) == (b))
#define OFFSET int
#define NOTE_DELETE(ctx, xoff) note_delete(ctx, xoff)
#define NOTE_INSERT(ctx, xoff) note_insert(ctx, xoff)
#define EXTRA_CONTEXT_FIELDS
#undef MIN
#undef MAX
#define MIN(a, b) ((a) <= (b) ? (a) : (b))
#define MAX(a, b) ((a) >= (b) ? (a) : (b))
struct context;
static void note_delete(struct context* ctxt, int xoff);
static void note_insert(struct context* ctxt, int xoff);
#include "diffseq.h"
static int cost = 0;
static void note_delete(struct context* ctxt, int xoff)
{
cost += 1;
}
static void note_insert(struct context* ctxt, int xoff)
{
cost += 1;
}
int main(int argc, char** argv)
{
struct context ctxt;
int len1 = strlen(argv[1]);
int len2 = strlen(argv[2]);
int diags = len1 + len2 + 3;
ctxt.fdiag = calloc(2 * diags, sizeof(*ctxt.fdiag));
ctxt.bdiag = ctxt.fdiag + diags;
ctxt.fdiag += len2 + 1;
ctxt.bdiag += len2 + 1;
ctxt.too_expensive = len1 + len2;
ctxt.xvec = argv[1];
ctxt.yvec = argv[2];
compareseq(0, strlen(ctxt.xvec), 0, strlen(ctxt.yvec), false, &ctxt);
printf("%d\n", cost);
return (cost == 0) ? 0 : 1;
}A diffutils-ból kell hozzá a diffseq.h fájl.
$ ./a.out ablak ablak
0
$ ./a.out ablak albak
2
$ ./a.out ablak alak
1[ Módosította: ngabor2 ]
-
Jester01
veterán
válasz
Keeperv85 #1709 üzenetére
Ez egy igen borzalmasan megírt script de a célnak gondolom megfelel.
Egy sort bogarászik ki a dmesg kimenetéből, ami illeszkedik az sd.27 sd.28 regex mintára majd abból kiírja a kettőspont előtti sd. részt. (A pont regexben egy darab tetszőleges karaktert jelent.)Nem tudom pontosan melyik sorokra keres, de van egy olyan érzésem, hogy a partíciókat kiíró sorból keres olyat amiben van 27-es és 28-as partíció is majd kiírja ezen eszköz nevét. Ilyesmi sorról lehet szó:
sda: sda1 sda2 < sda5 sda6 sda7 sda8 sda9 >
Persze itt csak 9-ig van partíció, de a script olyat keres amiben 28-ig van, és annak az eszköznek a nevét írná ki (jelen esetben az sda) -
Jester01
veterán
Nem teljesen tiszta mit szeretnél, de első tippem ez: sed -n "2,${g}p"
Másik kérdésre: igen, meg lehet adni regexet, ami alapesetben a szónak is megfelel ha éppen nincs benne speciális karakter. A szavakat perjelek közé kell tenni vagy az alternatív \c...c delimitációt használni. Tehát sed -n '/ettől/,/idáig/'
-
Jester01
veterán
Megfelelő locale beállítás mellett elvileg az alnum osztályban benne kell legyenek az ékezetes betűk is. Ha nem, akkor fel kell őket sorolni. Az aposztrófot pedig úgy a legegyszerűbb beletenni ha dupla idézőjelre váltunk:
sed "s/[[:alnum:]']//g; s/\(.\)/\1\n/g" abc | sort -u
-
Jester01
veterán
válasz
sto1911 #1686 üzenetére
Nincs fordítva mert az 1>file is azt jelenti igazából, hogy a jobb oldalon lévő fájlt nyissa meg (írásra) és mostantól az legyen az 1-es deszkriptor. A nyíl az egyenlőségjel (értékadás) helyett áll, az iránya pedig a megnyitás módjára utal.
1>file azt jelenti 1=file (és írni fogunk bele) -
Jester01
veterán
válasz
sto1911 #1682 üzenetére
Az 1-es deszkriptort (stdout) és a 2-est (stderr) szeretnénk megcserélni, mert a | pipe az 1-est irányítja át miközben a whiptail a 2-esre írja az eredményt és az 1-est pedig a terminálhoz használná.
A cseréhez a szokásos módszert használtam:
tmp=a
a=b
b=tmpVagyis először a 2-est ideiglenesen lemásoljuk a 3-asra (3>&2) majd az 1-est a 2-esre (2>&1) végül a 3-ast az 1-esre (1>&3-) és itt a 3-ast be is zárjuk.
-
Jester01
veterán
Ja látom már mi a probléma, a whiptail-nek szüksége van az stdout-ra de a pipe azt átirányítja, így amit ő a terminálba írogatna azt a sudo mint jelszót megkapja. Elvileg ez jó lesz mert megcseréli az stdout-ot és az stderr-t:
whiptail --passwordbox 'passwrd' 8 28 3>&2 2>&1 1>&3- | sudo -S -p "" apt-get update
Vagy, ha már megvan a jelszó akkor egyeszerűen:
echo $pwd | sudo -S -p "" apt-get update
-
-
Jester01
veterán
válasz
Speeedfire #1657 üzenetére
Mert dupla [ jellel kezdted, amik között ráadásul szóköz is volt. Ebben a formában az első az a test programot hívja meg, a második pedig már annak argumentum ezért fog besokallni. bash-ban van [[ konstrukció is, de ekkor nem szabad szóközt tenni mert ilyenkor ez a dupla zárójel egy egység, és ilyenformán kell lezárni is. Vagyis 2 lehetőséged van:
1.) test használata:
if [ $IF_FILE_PROCESSED -eq "0" ] && [ $IF_FILE_ERROR -eq "0" ];
2.) [[ használata:
if [[ $IF_FILE_PROCESSED -eq "0" && $IF_FILE_ERROR -eq "0" ]];A 0-át egyébként teljesen fölösleges idézőjelbe tenni, a változókat viszont célszerű ha nem tudod biztosan mi lehet bennük.
-
Jester01
veterán
válasz
pepe006 #1653 üzenetére
A find kapcsolóiról a man page ad részletes leírást.
Az f még a -type-hoz tartozik, az ellenőrzi, hogy mezei file legyen.
A -printf kiíratási művelet azzal megspékelve, hogy különböző dolgokat lehet behelyettesíteni. A %H az argumentum neve ami alatt megtalálta a fájlt, a \n szokás szerint soremelés.
A -quit pedig abbahagyja a keresést az első találat után. Ez nem csak a hatékonyság miatt van, hanem azért, hogy csak egyszer írja ki.A */ az kilistázza a könyvtárakat (az első szinten), és a for ciklus ezeken megy végig. Mint említettem a feladatkiírás nem volt teljesen precíz, szóval nem tudom ez-e az elvárt működés.
-
Jester01
veterán
válasz
FishAir #1641 üzenetére
$ cat >test.sh
#!/bin/bash
f=${1//./ }
tmp=${f#*[0-9]* }
echo "${f:0:${#f}-${#tmp}}"
$ bash test.sh jo.reggelt.kivanok.2013.sallang.hablaty.rizsa
jo reggelt kivanok 2013
$ bash test.sh jo.reggelt.kivanok.s20e13.sallang.hablaty.rizsa
jo reggelt kivanok s20e13Mint látható, ez bash specifikus. A másolás része gondolom menni fog.
-
Jester01
veterán
válasz
szlovibuki #1634 üzenetére
Ha van jogod cron-t használni akkor azzal meg tudod csinálni.
-
Jester01
veterán
Mellesleg van rá céleszköz, úgy hívják, pidof (vagy pgrep)
-
Jester01
veterán
válasz
persnongrat #1587 üzenetére
De igen. Viszont azt a feldolgozás során már könnyű kiszűrni.
-
Jester01
veterán
válasz
Speeedfire #1583 üzenetére
Valahogy így:
for i in $( (cat katalogusod.txt; ls -1) | sort | uniq -u ) ... -
Jester01
veterán
válasz
SteveBeard #1555 üzenetére
printf-et is használhatsz:
$ printf "%02d\n" 4
04 -
Jester01
veterán
válasz
SteveBeard #1552 üzenetére
Eléírod aztán levágod:
MINUTES=0$MINUTES
MINUTES=${MINUTES: -2}Figyelem, a -2 előtt kötelező a szóköz!
-
Jester01
veterán
válasz
Speeedfire #1534 üzenetére
Minden bizonnyal van aktív subshell is, például átirányítás miatt.
-
Jester01
veterán
válasz
Intruder2k5 #1512 üzenetére
Ha csak be kell jelentkezni akkor gondolom egyetlen "jól irányzott" http kérés curl vagy wget segítségével és kész.
-
Jester01
veterán
Akkor egy bash specifikus, nem fork-bomba jellegű megoldás (bambano kedvéért
):
#! /bin/bash
MAX_USAGE=5
df "$@" |
while read line
do
pct=${line%%%*}
pct=${pct##* }
if [[ $pct -gt $MAX_USAGE ]]
then
echo PANIC!!!
exit 1
fi
done -
Jester01
veterán
válasz
szoke12 #1430 üzenetére
Ez egy négyzetes megoldás, ha már ciklust akarsz akkor miért nem egyszer mész végig a kimeneten?
Mi van ha időközben megváltozik a fájllista?
Directoryk méretét kell nézni?sum=0
for x in $(find . -maxdepth 1 -type f -printf '%s\n')
do
sum=$((sum + x))
done
echo $sum-vagy-
(find . -maxdepth 1 -type f -printf '%s+'; echo 0) | bc
ls használatával is lehet hasonlót, plusz nyilván a du még mindig erre való.
-
Jester01
veterán
Azért kell a dupla zárójel mert így találták ki.
Egyébként általában inkább szorzat=$((szorzat*$1)) formában szokás írni mert úgy talán olvashatóbb (és persze azt a hármat külön sorokba). Az átlagszámításnál ne \ (visszaper, backslash) karaktert használj, hanem a "rendes" / perjelet. A shell sajnos csak egész aritmetikát használ tehát ha neked tizedestörtek kellenek akkor ajánlott valami segédprogram (jellemzően bc) alkalmazása. -
Jester01
veterán
válasz
szoke12 #1373 üzenetére
bash specifikus megoldás arra az esetre ha mindenképp van az elején nulla vagy ha kell az elejére nulla akkor is ha nincs:
$ shopt extglob
extglob on
$ x=123
$ echo 0${x##+(0)}
0123
$ x=0123
$ echo 0${x##+(0)}
0123
$ x=00123
$ echo 0${x##+(0)}
0123
$ x=000123
$ echo 0${x##+(0)}
0123
$ x=12003
$ echo 0${x##+(0)}
012003Szabványos megoldás:
case "$1" in
0*)
echo -n 0
expr substr "$1" \( index "$1" 123456789 \) \( length "$1" \)
;;
*)
echo "$1"
;;
esac -
Jester01
veterán
válasz
bambano #1369 üzenetére
bash-t feltételezve elég szép módszer, ha a hívott script asszociatív tömb inicializációs listát ad vissza (más nyelvekben tuple
)
$ cat parent.sh
#! /bin/bash
declare -A result=$(./child.sh)
echo ${result[foo]} ${result[bar]}
$ cat child.sh
#! /bin/bash
echo "([foo]=42 [bar]=1)"
$ ./parent.sh
42 1 -
-
Jester01
veterán
válasz
PumpkinSeed #1322 üzenetére
100000-ig egyébként a bash is kiválóan tud osztani, nem kell hozzá bc.
-
Jester01
veterán
válasz
SteveBeard #1298 üzenetére
Azért van a topik.
Melyik részével nem boldogultál? Csak egy string konstansba kellett volna felvenned a mac listát ahogy mutattam, aztán meg az az if kell és kész. -
Jester01
veterán
válasz
Jester01 #1295 üzenetére
busybox kompatibilis változat:
ignore="00-00-00-00-00-01,00-00-00-00-00-03,00-00-00-00-00-05,00-00-00-00-00-07"
i=1
while [ $i -le 8 ]
do
mac="00-00-00-00-00-0$i"
echo -n "$mac "
if [ "$ignore" == "${ignore/$mac/}" ]
then
echo "valid"
else
echo "ignored"
fi
i=$((i + 1))
done -
Jester01
veterán
válasz
SteveBeard #1294 üzenetére
Például belepakolod egy asszociatív tömbbe ami nem kell.
#! /bin/bash
declare -A ignore
ignore=(
["00-00-00-00-00-01"]=1,
["00-00-00-00-00-03"]=1,
["00-00-00-00-00-05"]=1,
["00-00-00-00-00-07"]=1
)
for ((i=1; i<8; i+=1))
do
mac="00-00-00-00-00-0$i"
echo -n "$mac "
if [[ ${#ignore[$mac]} = 0 ]]
then
echo "valid"
else
echo "ignored"
fi
done$ ./test.sh
00-00-00-00-00-01 ignored
00-00-00-00-00-02 valid
00-00-00-00-00-03 ignored
00-00-00-00-00-04 valid
00-00-00-00-00-05 ignored
00-00-00-00-00-06 valid
00-00-00-00-00-07 ignored(Ez viszont busybox-ban így nem megy)
-
Jester01
veterán
válasz
SteveBeard #1291 üzenetére
$ date +%Y-%V
2013-02man date: %V ISO week number, with Monday as first day of week (01..53)
-
Jester01
veterán
válasz
SteveBeard #1281 üzenetére
Kiírja a syslog-ba a megadott szöveget a megadott "tag" megjelöléssel:
Hogy honnan tudom? Hát innen:$ logger --help
BusyBox v1.17.1 (Debian 1:1.17.1-8) multi-call binary.
Usage: logger [OPTIONS] [MESSAGE]
Write MESSAGE (or stdin) to syslog
Options:
-s Log to stderr as well as the system log
-t TAG Log using the specified tag (defaults to user name)
-p PRIO Priority (numeric or facility.level pair) -
Jester01
veterán
válasz
SteveBeard #1278 üzenetére
Értem én. A tagadást gondoltam a környezet függvényében már megoldod.
Például if [ ! -f "$png" ] ... -
Jester01
veterán
válasz
SteveBeard #1275 üzenetére
Tedd a fájlnevet egy változóba (pl. $png) aztán ellenőrizd, hogy létezik-e: if [ -f "$png" ]
A hét számának előállítása igen kreatív.
-
Jester01
veterán
-
Jester01
veterán
válasz
SteveBeard #1251 üzenetére
Persze, bármit megjavítunk, hadd pörögjön a topik
-
Jester01
veterán
válasz
bambano #1249 üzenetére
Abban alapból működnek a bash stringmanipulációs cuccai hacsak valaki ki nem kapcsolta:
compile time option ("ASH_BASH_COMPAT", active per default) for several bash compatibility features: option pipefail, substring and replacement parameter expansion
name=$(host $IP)
name=${name##* }
name=${name%.lan.}Ezzel próbáltam:
BusyBox v1.17.1 (Debian 1:1.17.1-8) built-in shell (ash) -
Jester01
veterán
válasz
SteveBeard #1238 üzenetére
Feltéve, hogy az első Name: kezdetű sor után következik amit ki akarunk szedni akkor például:
name=$(nslookup $IP | awk '/^Name:/ { getline; print $4; exit }')
name=${name%.lan}(bash esetén legalábbis)
-
Jester01
veterán
válasz
SteveBeard #1232 üzenetére
De én az nslookup kimenetét szeretném, nem azt ami már átment a csövön
Szép az a forrás is -
Jester01
veterán
válasz
SteveBeard #1226 üzenetére
Semmi probléma, de még mindig nem muttattad meg mi jön ki az nslookup-ból
-
Jester01
veterán
válasz
SteveBeard #1221 üzenetére
Ezt már megint nem értem, biztos velem van a baj.
Nem tudnád megmutatni mit köp ki az nslookup amit át akarsz alakítani?Egyébként a grep | grep | awk -ért kapsz egy jó nagy pofont
MOD: egyébként van host program is, az nem jobb?
Új hozzászólás Aktív témák
Hirdetés
- ROBUX ÁRON ALUL - VÁSÁROLJ ROBLOX ROBUXOT MÉG MA, ELKÉPESZTŐ KEDVEZMÉNNYEL (Bármilyen platformra)
- Antivírus szoftverek, VPN
- Bontatlan - BATTLEFIELD 1 Collectors Edition - Játékszoftver nélkül
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Eredeti Microsoft termékek - MEGA Akciók! Windows, Office Pro Plus, Project Pro, Visio Pro stb.
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7800X3D 32/64GB RAM RTX 4070Ti Super GAMER PC termékbeszámítás
- ASUS TUF Gaming F16 FX607JV-QT212 Notebook
- BESZÁMÍTÁS! Apple iMac Pro (2017) 5K - Xeon W-2140B 64GB DDR4 RAM 1TB SSD Radeon PRO Vega 56 8GB
- Telefon felvásárlás!! Samsung Galaxy S25, Samsung Galaxy S25 Plus, Samsung Galaxy S25 Ultra
- BESZÁMÍTÁS! ASUS ROG STRIX X570-E Gaming alaplap garanciával hibátlan működéssel
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest