Pliiiiz ne zarjatok, holnap nagy szuksegunk van ra, utanna igerem hogy en zarom, KOSZI
If debugging is a process of removing bug, then programming is a process of putting them in ...
Pliiiiz ne zarjatok, holnap nagy szuksegunk van ra, utanna igerem hogy en zarom, KOSZI
If debugging is a process of removing bug, then programming is a process of putting them in ...
Jó hát biztos megvan rá az okod, de miért is nem volt jó a "nagy shell script topik"
Jester
adott egy allomany kov szerkezettel: nev keresztnev jegy(1<>10) csoportositsuk a szemelyeket jegy szerint es irjuk ki jol lathatoan
help!
ez eken de linuxban ... #!/bin/bash
Hi!
Tudna nekem mondani valaki egy egyszerű parancsot amivel meg tudom határozni (awk nélkül) egy xy könyvtáron belül levő fájlok átlag méretét egészre kerekítve? Thx
[ Szerkesztve ]
Például:
sum=0
count=0
for size in $(find "$1" -maxdepth 1 -type f -printf "%s ")
do
sum=$((sum + size))
count=$((count + 1))
done
echo "$sum bytes in $count files, averaging $((sum / count)) bytes per file"
MOD: persze nullával osztást illene ellenőrizni
[ Szerkesztve ]
Jester
hello!
Nekem is volna 1 gondom.
Megoldottam, hogy kimenetre kimenjen 4 db számjegy és azt kellene összeadni és átlagolni. Segítene valaki? Köszönöm.
A traktorosok,kombájnosok jó emberek:)
Hát ez ugyanaz a probléma mint fentebb
Jester
csak az nekem nem igazán akar működni
Leírom inkább az egész feladatot:
Írjon bash scriptet, amely az első pozícionális paraméterben megadott könyvtárban meghatározza
az olvasható fájlok átlag méretét bájtban (egészre kerekitve). A paraméterül kapott könyvtár létezését ellenőrizze,
és térjen vissza hibás (2) kóddal ha nem létezik. Ha nincs megadva paraméter, írjon ki rövid ismertetőt a használatról
és térjen vissza hibás (1) kóddal. Az eredmény egész számot (átlag) írja ki egy log.txt nevű fájlba.
A feladat megoldása során a "test", "expr", "ls", "cat", "echo", "cut", és "find" segédprogramokat használja.
A feladat eleje hiányzik már csak, mert addig sikerült megcsinálnom, hogy kilistázza egy mappán belül levő fájlok méretet, jelenleg csak azok jelennek meg a kimeneten, már csak összegezni és átlagolni kellene őket. Bár nem tudom többi rész is jó-e, mert "test,"expr" és "cat" parancsokat még nem használtam, ebbe a maradék részben kellene használni ezt a 3at?
Ezt csináltam eddig:
if [ -z "$1" ]
then
echo "Nem adtál meg könyvtár nevet! Kérlek add meg!"
exit 2
fi
a=`find / -name $1 2>/dev/null`
if [ -d "$a" ];
then
for fn in $a
do
for i in "$fn"/*.*
do
b=`ls -ltr $i`
echo $b|cut -d " " -f 5
done
done
else
echo "Nem található ez a mappa!"
fi
[ Szerkesztve ]
A traktorosok,kombájnosok jó emberek:)
már mind1, megcsináltam
A traktorosok,kombájnosok jó emberek:)
Köszi, hasznos volt
Üdv
Azt hogy lehetne megcsinálni, hogy kilistázok több db html fájlt és azokban megszámolni, hogy hány db sor van a <body> és </body> között? Próbáltam volna grep-el de csak egy sort számnolt, a <body>-t
sed -n '/<body>/,/<\/body>/ p' | wc -l
Ez beleszámolja a body sorokat is, tehát kettővel több lesz. Már ha volt body egyáltalán.
Vagy awk-val:
awk '/<body>/,/<\/body>/ { count++ } END { if (count > 2) print count - 2; else print 0 } '
vagy shellben közvetlenül:
count=0
body=0
while read line
do
test "x$line" != "x${line/<body>/}" && body=1 && continue
test "x$line" != "x${line/<\/body>/}" && body=0 && continue
[[ $body == 1 ]] && count=$((count + 1))
done
echo $count
Egyik sem szereti ha egy sorban van a <body> és a </body> És ha nincs </body> akkor is "között"-nek minősül.
Jester
awk-val csak 0-t ír ki
(#15) Darth_Revan válasza Darth_Revan (#14) üzenetére
sed-el meg csak az egyik body-t számolja bele
Tudsz adni egy példát?
Jester
Valaki esetleg tudna ajánlani valamiféle szakirodalmat vagy példatárat a témában?
Sziasztok
van egy változóm benne floatok, ezeket szeretném összeadni, már legalább 20-féleképp próbáltam de eddig semmi :/
"a" a változó
"sum"-ba kéne összeadogatni az "a"-ban lévő floatokat (pl 56.45,65.32 stb..)
for i in $a
do
`sum+=$i | bc`
done
megköszönném ha valaki tudna segíteni
ez sem jó
sum=$(echo "$sum+$i" | bc)
[ Szerkesztve ]
Ha esetleg érdekel valakit, végül felba***, szóval felidegesítettem magam, és hagytam a fenébe a bashscriptet, és perlben oldottam meg, lám ott tök triviálisan ennyi volt:
$sum=0.0;
foreach(@ssr){
$sum+=$_;
}
-.-
Ha vesszővel vannak elválasztva, akkor pl.:
a="56.45,65.32,12.34"
sum=$(echo ${a//,/+} | bc)
Jester
lol
"az erzelem szamomra fontos dolog.. pl: erzem ha ehes vagyok"
Valaki tud esetleg segíteni ebben:
Egy VB Sript-et kellene írni ,, , ami az Fn+F3 gombokra vonatkozna ACER TM8571 Notebookra,és azt az utasítást adja a gépnek induláskor, mintha benyomtam volna az Fn+F3-as gombot... Ami egyébként a Bluetooth-ot kapcsolja be!
A VB Scrip-tel az autómatikus Bluetooth bekapcsolását szeretném megoldani, hogy ne keljen mindig bekapcsolgatni ujraindítás után!
Köszönöm ha tud valaki érdemben segíteni!
Bash <>Batch
szerintem benézted a topicot
A tudást mástól kapjuk, a siker a mi tehetségünk - Remember: Your life – Your choices!
nem tudom hogy ismeretek-e ilyet de szuksegem volna olyan scriptre mint flac>mp3 eseteben:
#!/bin/bash
for a in *.flac; do
< /dev/null ffmpeg -i "$a" -qscale:a 0 "${a[@]/%flac/mp3}"
done
namarmost nekem musepack (*mpc)-bol kellene mp3-t varazsolni.
fent van a decoding library a libmpcdec is. valakinek valami otlete ?
Naj csak meglett.
lame, mutagen, mplayer (vagy tetszes szerint mplayer2 es a fork mpv)
es a script
#!/bin/bash
DEFAULT_OUTPUT_DIR=/tmp/mp3ify
QUALITY=2
VBR_QUALITY=4
MIN_BITRATE=64
MAX_BITRATE=256
SAMPLE_FREQ=44.1
function any_to_mp3 {
PIPE=`mktemp -u -t mp3ify.pipe.XXXXXX`
mkfifo "$PIPE"
mplayer -ao pcm -ao pcm:file="$PIPE" "$INPUT_FILE" -noconsolecontrols > /dev/null 2>&1 &
lame -m j -q $QUALITY -v -V $VBR_QUALITY -b $MIN_BITRATE \
-B $MAX_BITRATE -s $SAMPLE_FREQ "$PIPE" "$OUTPUT_FILE" > /dev/null 2>&1
rm "$PIPE"
python2 -c "
import mutagen
input = mutagen.File(\"$INPUT_FILE\", easy = True)
output = mutagen.File(\"$OUTPUT_FILE\", easy = True)
for tag in [ 'artist', 'album', 'tracknumber', 'date', 'genre', 'title', 'comment' ]:
value = input.get(tag)
if value: output[tag] = value[0]
output.save(v1=2)"
}
function usage {
echo "mp3ify <input_dir> [<output_dir>]
Transforms structure <input_dir>/X/Y/.../Z into structure <output_dir>/X/Y/.../Z
according to the following rules:
flac, ogg, m4a, ape, aac, mpc files will be encoded to mp3 preserving tags.
Everything else will be copied without modification.
Requires: mplayer, lame, mutagen.
"
exit 1
}
INPUT_DIR="$1"
[ -d "$INPUT_DIR" ] || usage
OUTPUT_DIR="${2:-$DEFAULT_OUTPUT_DIR}"
find "$INPUT_DIR" -name '*.*' | while read INPUT_FILE
do
INPUT_EXTENSION="${INPUT_FILE##*.}"
OUTPUT_FILE="$OUTPUT_DIR/${INPUT_FILE#$INPUT_DIR}"
mkdir -p "`dirname "$OUTPUT_FILE"`"
case $INPUT_EXTENSION in
flac|m4a|ogg|ape|aac|mpc)
OUTPUT_FILE="${OUTPUT_FILE%.$INPUT_EXTENSION}.mp3"
echo -n "Converting ${INPUT_FILE##*/}... "
any_to_mp3
;;
*)
echo -n "Copying ${INPUT_FILE##*/}... "
cp "$INPUT_FILE" "$OUTPUT_FILE"
;;
esac
echo "done."
done
Sziasztok!
Nagyon láma vagyok bash-ben de nagioshoz szükségem van néhány scriptre.
Egy ubiquity eszközről ssh-val kell leszednem 2 infot.
Ezt a scriptet írtam (nem kiröhögni ha nagy hülyeségek vannak benne, a jelszótárolásra még kitalálok vmit.
#!/bin/bash
#
#check_ubnt device
#
if [ $# -lt 1 ]; then
echo "Usage: ./check_ubnt_airmax_capacity devices"
exit 127
fi
HOST=$1
DATA="Airmax capacity:"
CRIT=30
WARN=50
STATUS=0
result=`sshpass -pjelszo ssh -o StrictHostKeyChecking=no root@$HOST cat /proc/sys/dev/ubnt_poll/capacity && exit`
if [ $RES != 0 ]; then
INK="Data Unknown - SNMP problem. No data received from host.";
echo $DATA;
STATUS=3;
exit $STATUS;
fi
#CHECK WARNING AND CRITICAL LEVELS
if (( $result < $CRIT )); then
echo "Airmax Capacity Critical - "$result"%";
STATUS=2
elif (( $result < $WARN )); then
echo "Airmax Capacity Warning - "$result"%";
STATUS=1
else
echo $DATA $result"%"
fi
exit $STATUS
A problémám, hogy nem zárja le az ssh kapcsolatot.
Próbáltma már minden félét.
EOF-al kiadni ssh-n a parancsokat de akkor még az eredmény változóban történő eltárolásával se boldogulok.
Megköszönnék egy kis segítséget tényleg nagyon béna vagyok bashben,
dkaro
Sziasztok,
segítségre lenne szükségem.
Készítettem egy scriptet, ami rendszeresen frissít néhány dolgot a telefonomon. A problémám az lenne, hogy ha így írom, akkor minden jól működik:
#!/sbin/sh
if [ -e $CMU/cm*NIGHTLY-bacon.zip ] || [ ! -e /data/system/packages.xml ]; then
Viszontha így, akkor nem:
#!/sbin/sh
CM=$(cd $CMU && ls cm*NIGHTLY-bacon.zip)
if [ -e $CMU/$CM ] || [ ! -e /data/system/packages.xml ]; then
Valaki tudna nekem segíteni, hogy miért nem működik a második?
Előre is köszönöm a válaszokat.
OnePlus One
Nem nez ki olyan rosszul es hulyesegek sincsenek benne - bar nehol valoban lehetne egy kicsit egyszerubben kifejezni azt amit szeretnel.
En a helyedben a kulonbozo jelszavas trukkozesek helyett csinalnek egy ssh-keygen
-es kulcspart a gepekhez, amivel a megfelelo jogosultsagok beallitasa utan jelszo nelkul at lehet jelentkezni egyikrol a masikra. Azutan egy sima result=$(ssh root@$HOST cat /proc/sys/dev/ubnt_poll/capacity)
-val jonnie kellene a dolognak
Ha meg aktualis, akkor kerlek irj hogy mukodik-e!
Gender of electrical connectors is defined by the pins.
Látom elég kihalt a topic, de ezért hátha tud valaki segiteni.
Adott ez a letöltő script amit csináltam.
wget "https://opendata.dwd.de/weather/nwp/icon-eu/grib/06/tot_prec/icon-eu_europe_regular-lat-lon_single-level_$(date +"%Y%m%d")06_012_TOT_PREC.grib2.bz2" -O ICONPCP.grib2.bz2
A 012 itt változó szám, 000 tól indul és egyesével megy 118 ig. Az lenne kérdés h meglehetne úgy oldani h 001 kezdve pl 072 ig letöltse fájlokat?
Egyesével gondoltam letölteni, da úgy jó sokszor meg kelleni ismételni ezt a sort.
LG Velvet 5G Android 11 - Windows 10 Pro x64 & Debian 11 Bullseye - WoWS unsinkable_sam_
for i in 0{01..72} ; do echo alma${i}fa ; done
Ha ebben az echo
-t lecsereled a wget
-es cuccodra, akkor mukodni fog.
[ Szerkesztve ]
Gender of electrical connectors is defined by the pins.
for i in 0{01..72} ; do wget "https://opendata.dwd.de/weather/nwp/icon-eu/grib/12/tot_prec/icon-eu_europe_regular-lat-lon_single-level_$(date +"%Y%m%d")12_001_TOT_PREC.grib2.bz2" ; alma${i}fa ; done
Így? Nem megy így, csak egy fájlt tölt el ami meg van adva a linkben.
[ Szerkesztve ]
LG Velvet 5G Android 11 - Windows 10 Pro x64 & Debian 11 Bullseye - WoWS unsinkable_sam_
Srácok, segítséget kérnék.
Mutatom, hol tartok épp:
username="$(id -un)"
usergroup="$(id -gn)"
origuser="${SUDO_UID}"
origgroup="${SUDO_GID}"
echo "Current user: ${username}:${usergroup}"
echo "Original user: ${origuser}:${origgroup}"
Ha simán, userként hívom a scriptet, akkor tök jól megvan a user és a group is. Rootként szintén. De, szükségem lenne az eredeti userre is ez utóbbi esetben. A fenti félmegoldás szintén működik, azzal a szépséghibával, hogy a sudozó user uid és gid számait kapom. Ezek jók is, de nekem mindenképp nevesítve kellene a user és a group is.
Kettes számú feladat: ha a fenti megvan, akkor nem rootként a két-két user és group megegyezzen, ne legyen üres.
Van erre ötletetek?
Van egy egyszerűnek tűnő projekt, ami már a bash scriptnél elakad:
Az output-ba összegyűjti a tartalomjegyzéket, és az aktuális klipp adatait.# Összegyűjti azokat az időpontokat, hol kezdődnek a klippek, szóközzel elválasztva
lines=$(echo "$output" |grep .mov |cut -d' ' -f3)
# Kiolvassa az aktuális klip sorszámát
clip_id=$(echo "$output"|grep 'clip id'|cut -d' ' -f3)
# Kiolvassa hol tart a lejátszás
current_time=$(echo "$output" |grep 'display timecode:' |cut -d' ' -f3|cut -d';' -f1)
# Ez elméletileg a klip kezdési időpontját adja meg
total_time=$(echo "$lines" | sed -n "${clip_id}p" |cut -d';' -f1)
Ez utóbbival van problémám, mivel nem kap értéket a total_time. Per pillanat ötletem sincs, hogy miért. A sed {} paraméteréről nem sokat találtam. Van valami ötlet pontosan mit csinál ez és miért nem adja vissza az időt?
Saját kútfőből próbáltam máshogy elérni a célt és eddig jutottam:total_time=$(echo $lines | cut -d' ' -f 39)
Ez visszaadja a 39. track kezdés időpntját, de itt is elakadtam.
A total_time=$(echo $lines | cut -d' ' -f $clip_id)
nem hozott jó eredményt valami \r-re panaszkodik.
Konkrét szám helyett hogy helyettesítsem a $clip_id-vel?
Az echo "lines: " $lines
echo "clip id: $clip_id"
echo "current_time: $current_time"
echo "total time: $total_time"
Kimenetelines: 00:00:00:00 00:02:48:00 00:03:28:16 00:06:08:20 00:09:42:24 00:11:48:09 00:16:04:14 00:18:57:15 00:22:25:13 00:23:08:16 00:23:51:14 00:24:13:12 00:27:16:00 00:30:37:00 00:34:51:13 00:37:14:16 00:39:50:09 00:43:54:11 00:47:19:14 00:48:03:02 00:48:37:01 00:52:35:23 00:55:44:00 00:57:37:07 01:00:30:10 01:03:29:00 01:07:13:03 01:10:47:06 01:14:17:01 01:16:30:19 01:20:26:13 01:22:44:19 01:26:49:20 01:29:26:24 01:32:20:12 01:33:56:08 01:34:34:09 01:38:39:15 01:38:47:12 01:56:52:15 01:56:54:12 02:13:08:22 02:13:44:17 02:15:51:10 02:18:30:10 02:20:35:10 02:22:29:00 02:24:52:01 02:28:14:06 02:31:09:16 02:34:12:04 02:37:51:09 02:39:55:15 02:40:05:14 02:40:35:14 02:41:05:14 02:42:25:14 02:43:12:08 02:49:22:16 02:52:07:03 02:53:59:17 02:55:01:04 02:57:02:12 02:57:54:19
clip id: 39
current_time: 01:45:09:07
total time: 01:38:47:12
Freeware, és akciós programok egy helyen https://www.facebook.com/freewarenews
Hmmm... Ez inkabb ugy hangzik, mintha a clip_id
-val lenne a gond. Mintha ott ragadna egy CR
a telnet kommunikaciobol a vegen.
Ha biztos vagy benne, hogy a clip_id
az csak decimalis szam lehet, akkor a cut
utan meg eggyel tovabb szurheted egy tr -cd 0-9
-cel.
De amugy mar a bemenetet (itt epp output
) lenne inkabb erdemes szurni: tr -d '\r'
- es akkor tuti nem lesz a tobbi valtozoval sem ilyen gond.
Amugy a {}
"parameter" az nem sed
specifikus. Itt konkretan az a program ebbol semmit nem fog latni, mert az mar a hivas elott a clip_id
-val (es a $
-ral) egyutt behelyettesitodik a clip_id
ertekere. Ami hogyha egy CR
-t is tartalmaz, valoszinuleg nem lesz ervenyes sed
parancs...
Tovabba valoszinuleg a telnet klienst/szervert is be lehetne ugy konfiguralni, hogy ne akarjanak CR
-t kuldeni; de emlekeim szerint csak azzal szabvanyos a kommunikacio. Szoval a fenti hack egy kicsit meg altalanosabb megoldas is.
[ Szerkesztve ]
Gender of electrical connectors is defined by the pins.
Bar nem neztem utana, hogy pontosan miota, de az id
az fogoad uid/gid parametereket is, szoval egy kelloen recens verzioval ennek mukodnie kellene:
username="$(id -un)"
usergroup="$(id -gn)"
origuser="`id -nu ${SUDO_UID}`"
origgroup="`id -ng ${SUDO_GID}`"
echo "Current user: ${username}:${usergroup}"
echo "Original user: ${origuser}:${origgroup}"
Ez veletlenul teljesiti a masodik feladatot is, mert nem sudo-s shell-ben az a ket valtozo valoszinuleg ures sztringekkent helyettesitodnek be.
De ha tutira akarsz menni, akkor hasznalhatod a futyi operatort (:-
) a behelyettesiteskor.
[ Szerkesztve ]
Gender of electrical connectors is defined by the pins.