2016-03-18 27 views
-1

Döngülerimle ilgili bir sorunum var. Bash sürüm 4.1.2 kullanıyorum.Sözdizimi hatası - döngü - bash

### List of files to process from the File .txt defined before ### 
g=`cat ${AA}.txt | wc -l` 

### Number of time the loop has to make calculated with the number of using cores ### 
let h=($g/$nproc) 

### Loop using $h ### 
for i in ((i = 1; i <= ${h}; i++)); do 

### Loop to asign every core a process ### 
for j in ((j = 1; j <= ${nproc}; j++)); do 

command lines to process $file 

done 

### Wait for every started process to finish ### 
wait 

done 

alıyorum sözdizimi hatadır:

/var/spool/torque/mom_priv/jobs/1796866.SC: line 57: syntax error near unexpected token `(' 
/var/spool/torque/mom_priv/jobs/1796866.SC: line 57: `for i in ((i = 1; i <= h; i++)); do' 

i için ve j için döngüler yazmak için bir yol farklı işe yarıyor söz diziminde yapmak var mı

Kodum şudur ? Teşekkür

+1

https://www.gnu.org/software/bash/manual/bashref.html#Looping-Constructs –

+4

'i in 've' j in'leri kaldırın –

+2

Lütfen sormadan önce http://shellcheck.net/ adresini deneyin. Biz insanlar. – tripleee

cevap

2

sözdizimi (örneğin): Biz bu konuda iken

for ((i = 0; i < $h; i++)); do 

:

g=`cat ${AA}.txt | wc -l` 

olduğunu çoğu kişi bu gibi yazmak istiyorum

for ((i = 1; i <= $h; i++)); do 

rağmen muhtemelen daha iyi olarak yazılmıştır:

g=$(wc -l < "$AA.txt") 

$() notasyonu, onlar gömülü boşluk içerebilir Biz

daima dosya adlarını ihtiva değişkenleri alıntı bir çocuk süreç kaydetmek `

daha okumak daha kolaydır.

+0

Bir dosyadaki satırları saymak için alt kabukları başlatmaya gerek yok, bash bunu yerleşiklerle kolayca yapar. Bunu yapmamın bir yolu ile ilgili yorumumu gör. – ghoti

+0

@ghoti: Katılıyorum ama soru, 'döngüler' hakkındaydı ve uyarılar var. “readarray”, bash 4'ten (OP'nin kullandığı) elde edildi, fakat benim problemim, giriş dosyasının ne kadar büyük olduğunun hiçbir fikrimiz olmadığı. Çok büyük olsaydı, bir dizideki elemanların sayısı üzerindeki sınırı bile (ya da teoride) bozabilirdi. Bununla birlikte, dosya adlarının bir listesidir, bu yüzden olası olmadığına katılıyorum. Sorunun gösterdiği deneyim düzeyi göz önüne alındığında, çok yaygın "piped cat" uygulamasının düzeltilmesinin daha önemli olduğunu düşünüyorum. – cdarke