You are sure to know how to start programs with parameters in the console. The following command starts the editor program' gedit', opens the file' set_color. sh' in the home directory and places the cursor in line 5 at the 9th position:
hans@linux:~$ gedit ./set_color.sh +5:9
The function of the presented program (bash script)' set_color. sh' consists of assigning values internally to the parameters $1 to $3 via the command' let' 3, depending on the number of parameters passed, and then assigning values to the variables R, G and B or the variables R, G and B with the values of the exactly 3 passed parameters. A (colour) value is then calculated and displayed with the variables R, G and B.
#!/bin/bash # if [ $# -ne 3 ] # If the number of parameters is not equal to 3, then ... then set 220 20 180 # → $1=220 , $2=20 , $3=180 R=$1 G=$2 B=$3 else R=$1 G=$2 B=$3 fi let color=$R*256*256+$G*256+$B echo colour value = $color echo Continue with ENTER... read dummy
In general:
The script' set_color. sh' is started first with exactly three parameters and then only with two parameters. The parameters are not checked for validity in the context of RGB color values:
hans@linux:~$ chmod +x set_color.sh # Make the script executable
hans@linux:~$ ./set_color.sh 10 20 128 Colour value = 660608 Continue with ENTER... hans@linux:~$ $HOME/set_color.sh 0 128 Colour value = 14423220 Continue with ENTER...
Of course, you can also start a Gambas program with parameters in a console:
hans@linux:~$ gbx3 $HOME/color_select -- 225 110 60 hans@linux:~$ gbx3 ./color_select -- 225 110 60 hans@linux:~$ gbr3 $HOME/color_select/color_select.gambas -- 225 110 60
As a separator between the Gambas project path and the arguments,“–” is used. This is also indicated in the help of gbx3: Usage: gbx3[options][<project file>] [– <arguments>]/, if <arguments> is interpreted as a placeholder for a parameter list separated by blanks.
With Application. Args, Gambas provides an array with the given arguments of the program from the console. The first argument Application. Args[0] is (? $0) is always the name of the started Gambas program and the property Application. Args. Count returns the number of all - not only the passed - parameters. In this point, working with the array of arguments in Gambas differs from determining the number of arguments in a bash script, because the source code of the Gambas project' color_select' is similar to the above-mentioned bash script. With the values of the 3 parameters - which are not checked in this variant - a color value is calculated, which serves as default value for the used component ColorChooser1:
Public Sub Form_Open() Dim R, G, B As Integer FColor.Center FColor.Resizable = False If Application.Args.Count <> 4 Then R = 220 G = 20 B = 180 Else R = Val(Application.Args[1]) G = Val(Application.Args[2]) B = Val(Application.Args[3]) Endif ' Application.Args.Count <> 4 ? ColorChooser1.Value = Color.RGB(R, G, B) End ' Form_Open
The call:
hans@linux:~$ gbx3 ./color_select -- 33 133 33
starts the program for color selection with the default color medium-green:
Figure 5.3.3.2.1: Color selection program - default color via 3 parameters
The following modified section of the source code contains a check of the parameter values:
Public Sub Form_Open() Dim sMessage As String FColor.Center FColor.Resizable = False If Application.Args.Count <> 4 Then ColorChooser1.Value = Color.RGB(220, 20, 180) ' Colour: pink Else If ParameterTest(Application.Args[1], Application.Args[2], Application.Args[3]) = True Then ColorChooser1.Value = Color.RGB(Val(Application.Args[1]), Val(Application.Args[2]), Val(Application.Args[3])) Else sMessage = "At least one parameter has a wrong value!" sMessage &= gb.NewLine sMessage &= "Parameterliste: " & Application.Args[1] & Chr(32) & Application.Args[2] & Chr(32) & Application.Args[3] sMessage &= gb.NewLine sMessage &= "The programme will be terminated immediately!" Message.Error(sMessage) FColor.Close Endif Endif ' Application.Args.Count = 4 ? End ' Form_Open Public Function ParameterTest(p_1 As String, p_2 As String, p_3 As String) As Boolean Dim bOK As Boolean If IsInteger(p_1) = True And IsInteger(p_2) = True And IsInteger(p_3) = True Then If (Val(p_1) >= 0) And (Val(p_1) <= 255) Then bOK = True Else bOK = False Endif If (Val(p_2) >= 0) And (Val(p_2) <= 255) Then bOK = True Else bOK = False Endif If (Val(p_3) >= 0) And (Val(p_3) <= 255) Then bOK = True Else bOK = False Endif Else bOK = False Endif Return bOK End ' Function ParameterTest(...) As Boolean
This follows a call of the program in the console:
hans@linux:~$ gbx3 ./color_select -- 128 128 294
this error message: