Displaying and decrementing base health on collision?

So I have enemy gameobjects attacking a user in a small base. The enemies have an OnCollisionEnter method where it checks to see what it collides with. If it’s tagged as the base, it sets an attack boolean to true, where the fixedupdate is supposed to check for that flag. When true, it calls a coroutine in which I try and call the method that removes health from the wall (this script is attached to the wall). The walls health is then displayed on a HUD I have elsewhere in the room Code Below

Problem is, enemies can’t do damage to the base and the HUD remains unchanging. Any tips/help? Here is the enemy behaviour script

public class EnemyBehaviour : MonoBehaviour {
private GameObject target;
private Vector3 targetPos;
private WallBehaviour wallBehaviour;
public GameObject collisionObject;
private bool attackMode;
public float speed = 0.1f;
public int hp = 100;
public float attackCooldown = 1.0f;
public int attackPoints = 1;
public float killThreshhold = 1.5f;
public Color defaultColor;

//Use this for initialization
void Start() {
    target = GameObject.FindGameObjectWithTag("MainCamera");
    targetPos = target.transform.position;
    attackMode = false;
}

void FixedUpdate() {
    targetPos = target.transform.position;
    transform.LookAt(target.transform);
    float step = speed * Time.deltaTime;
    transform.position = Vector3.MoveTowards(transform.position, targetPos, step);

    if (attackMode)
    {
        StartCoroutine("attemptAttack");
    }
    else
    {
        GetComponent<Renderer>().material.color = defaultColor;
    }
}

void OnCollisionEnter(Collision collision)
{
    collisionObject = collision.gameObject;
    if (collision.gameObject.tag == "Bunker") {
        wallBehaviour = collision.gameObject.GetComponent<WallBehaviour>();
        attackMode = true;
    }
}

public IEnumerator Attack()
{
    attackMode = false;
    GetComponent<Renderer>().material.color = Color.red;
    wallBehaviour.ProcessDamage(attackPoints);
    yield return new WaitForSeconds(attackCooldown);
    attackMode = true;
}

void ProcessDamage(int attackPoints)
{
    hp -= attackPoints;
    if (hp <= 0)
    {
        Die();
    }
}

public int getHitPoints()
{
    return hp;
}

public void Damage(DamageInfo info)
{
    hp -= info.damage;
    if (hp <= 0) {
        Die();
    }
}

public void Die()
{
    Destroy(gameObject);
}

StartCoroutine(“attemptAttack”);
I see no method called “attemptAttack” did you mean to use “Attack”? Also, unless you need to stop the coroutine by it’s name it is safer to pass the method as the parameter of StartCoroutine instead of a string since if the string is wrong there will be no indication of that.
i.e. use

StartCoroutine(Attack());