Wat betekent -f in een if-statement in een bash-script?

Ik probeer dit stuk code te begrijpen:

if [ -f /etc/bashrc ]; then . /etc/bashrc fi 

Ik weet het niet zeker wat de -f precies betekent.

Answer

De relevante manpage om dit te controleren is die van de shell zelf, bash, omdat -f functionaliteit is die de shell biedt, is het een ingebouwde bash.

Op mijn systeem (CentOS 7), de fijne man-pagina behandelt het. De grep geeft mogelijk niet dezelfde resultaten op andere distributies. Als u echter man bash uitvoert en vervolgens naar “-f” zoekt, zou dit de gewenste resultaten moeten opleveren.

$ man bash | grep -A1 "\-f file$" -f file True if file exists and is a regular file. $ 

Answer

In het kort, het stuk code zal een /etc/bashrc -bestand als broncode hebben als het bestaat, en het bestaan wordt geverifieerd door het [ commando waarvan -f een operator / parameter is.

if...then...else...fi statement in shell scripting evalueert de exit status van commandos – 0 bij succes. Het is dus gepast om zoiets als dit te doen:

if ping -c 4 google.com; then echo "We have a connection!" fi 

Het commando is in jouw geval [ die ook bekend staat als test commando. Dus het “zou volkomen geldig zijn om te doen

if test -f /etc/bashrc; then . /etc/bashrc fi 

De -f flag verifieert twee dingen: het opgegeven pad bestaat en is een normaal bestand. Als /etc/bashrc in feite een map is of ontbreekt, zou test een exitstatus anders dan nul moeten retourneren om een fout aan te geven.

Dit commando was oorspronkelijk een apart commando, dat is niet onderdeel van de ingebouwde commandos van de shell. Tegenwoordig hebben de meeste Bourne-achtige shells het als ingebouwd, en dat is wat de shell zal gebruiken.

Even terzijde, het /etc/bashrc lijkt een onnodig extra bestand dat uw admin of oorspronkelijke auteur van het codefragment gebruikt. Er bestaat /etc/bash.bashrc, dat bedoeld is als systeembreed rc-bestand voor bash, dus je zou verwachten dat het wordt gebruikt.

Zie ook:

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *