Bash Get All Command Line Arguments Before Last Parameter In $@

I‘m writing a wrapper bash shell script that will get the last argument (a domain name) from the command line into a shell variable called $_domain. I need to find all other parameters before last parameter in $@ and stored in a shell variable called $allargs. So that I can pass them as follows:

ADVERTISEMENTS

/path/to/real/binary “$allargs” “$_domain”

How do I do this using bash shell under Unix like operating systems?

You can store all command line arguments or parameter in a bash array as follows:

array=( $@ )

First, you need to find out length of an array:

len=${#array[@]}

Next, get the last command line argument from an array (i.e. $@ stored in an array):

_domain=${array[$len-1]}

Finally, extract and store all command line parameters before last parameter in $@:

args=${array[@]:0:$len-1}

Putting it all together:

#!/bin/bash
array=( $@ )
len=${#array[@]}
_domain=${array[$len-1]}
_args=${array[@]:0:$len-1}
 
echo "Domain: $_domain"
echo "All Args before $_domain are: $_args"

Run it as follows:
./script -p -y --zzz cyberciti.biz
Sample outputs:

Domain: cyberciti.biz
All Args before cyberciti.biz are: -p -y --zzz

Another sample run:
$ ./script -p -y --zzz --delete cyberciti.biz
Sample outputs:

Domain: cyberciti.biz
All Args before cyberciti.biz are: -p -y --zzz --delete
🐧 Get the latest tutorials on SysAdmin, Linux/Unix, Open Source/DevOps topics:
CategoryList of Unix and Linux commands
File Managementcat
FirewallCentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNCentOS 8 Debian 10 Firewall Ubuntu 20.04

ADVERTISEMENTS
0 comments… add one

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre>, <code>...</code> and <kbd>...</kbd> for code samples.