Вы всегда должны представлять минимально работающую программу, а не просто фрагмент исходного кода.В вашем коде неясно, как аргументы командной строки хранятся в «option» и «value».Рабочий пример может быть следующим:
program cmd_read
!
implicit none
!
integer, parameter :: MAXARG=8 ! There are four pairs of arguments
character(len=1024), dimension(MAXARG) :: args
character(len=2) , dimension(MAXARG/2) :: options = (/'-o', '-s' , '-k', '-b' /)
character(len=1024) :: outputfile = ' '
integer :: iarg ! number of arguments
integer :: i ! dummy loop index
integer :: ios ! io error status
integer :: s=0, k=0, b== ! command line integer values, provide default values
!
args = ' ' ! ensure that they are blank
iarg = COMMAND_ARGUMENT_COUNT() ! Get number of arguments
if(iarg > 0) then ! Always keep in mind that there might be no arguments
do i = 1, iarg
call GET_COMMAND_ARGUMENT (i, args(i) )
enddo
endif
!
do i= 1, iarg, 2 ! argument names are odd arguments
! ! Arguments might be in different sequence
if(args(i)==options(1)) then ! An alternative is the "CASE" construct
outputfile = args(i+1)
elseif(args(i)==options(2)) then
read(args(i+1),*, iostat=ios) s
if(ios/=0) then
write(*,*) ' Error on -s'
endif
elseif(args(i)==options(3)) then
read(args(i+1),*) k
elseif(args(i)==options(4)) then
read(args(i+1),*) b
endif
enddo
write(*,'(a, i4, i4, i4)') outputfile(1:len_trim(outputfile)), s, k, b
!
end program cmd_read
Эта программа еще не проверяет, присутствуют ли аргументы командной строки, и находятся ли они в приемлемом числовом диапазоне.Проверка ошибок ввода / вывода для '-s' - это простой и грязный пример, чтобы перехватить такие вещи, как -s 1.8 или -s text