Here is an exercise I do and give my students. It is very simple and designed to address the issue of shifting. There are really two exercises and you'll need to keep some practice tips in mind as you do these.
Exercise 1. This can be thought of as a chromatic shift. All you are doing is playing the chromatic scale on one string in groups of 4 notes. Keeping you fretting hand (left for most people) positioned with one finger over each of four consecutive frets (e.g. frets 1, 2, 3, and 4 in 1st position) play the chromatic scale up the neck. If you cannot already do this w/o frustration there is a simple way to fix it. Start by playing the note under the pinky (e.g. G# in the first position on the E string) and shift the whole hand up until your index finger is on the 5th fret (A). So you are only playing 2 notes, G# and A, but using the fingering pinky - index. Once you can reliably do this in one position move on to the chromatic scale, applying this shift after each group of 4 notes until you hit the end of your fingerboard. Then reverse. You may need to do the 2 note exercise in the reverse direction a few times until you feel comfortable. Once you can play chromatic try just playing fingers 1 and 4 in the pattern, moving them up the same way. This exercises a couple things. The first is getting used to a large movement required for a small change and the second is keeping your hand stable as you move. I find that guitarists have problems judging distance and pitch, e.g. they correlate large pitch jumps with larch hand leaps and this is not necessarily true. The other thing is that guitarists sometimes have trouble keeping their fingers in a fixed shape as the whole hand is moved. Even though this exercise may seem extremely basic it is designed to isolate these points without putting a dozen other things on your plate. The end result should be the development of a haptic memory for walking up the neck, like walking down the stairs without looking.
Exercise 2. Interval jumps. This exercise involves the process of hearing a desired interval in your head, feeling the jump needed, then taking the jump. For this you can use just your index finger to start. The idea is to program a feeling in your arm to a perceived pitch jump without hearing it. Since you sing you may like this. Starting at any not one any string (in the lower register or frets to give your self distance) commit to playing a specific interval (consecutive not simultaneous), e.g. a major third. Let's say for example G to B on the E string. Play the first note then sing the second. Now move your hand up the neck, plant it on the note you think is B and see if you're correct. Obviously you may not be the first time. Just take note of whether you overshot or undershot. That gives you a baseline for your perception of distance and pitch change. Now you can proceed by glissando from one note to the other a few times to feel the distance. After a few tries take the glissando away and lift the finger, move it up, plant it, and play the second note. if you miss do not consider it a failed attempt at a M3 but test your ear and state what interval you actually played, perhaps a m3 or a P4, etc. In this process you trained yourself to associate a pitch with a movement. Now you know what that pitch feels like and the next time you aim for the correct one adjust you arm movement accordingly. This type of exercise should not take too long to work.
These can be varied or modified to more complex versions. For example one can play the M3 from G to B with all combinations of starting and ending finger, e.g. index to pinky, ring to middle, etc. This should train you to trust the large scale movement and not over stretch to reach far away notes like a lot of guitarists do.
You can also modify this to shift a chord form up the neck, for example a simple I IV I V all using an E-form wold involve rather large jumps. A third modification is to play up the scale in jumps with one finger on one string, e.g. G, A, G, B, G, C, G, D, etc. Each time the jump gets bigger.
People have a tendency to either tighten their hand to keep the fingers together during a shift or stretch them out. I think the later is out of fear that they might not get there. Either of these is not good because is causes the fingers to completely miss the mark. Think of the fingers as passengers on a train and the arm and hand the train. There are small scale local movements of the fingers in their neighborhood and large scale global movements of the whole neighborhood (the train car) up ad down the track. These types of exercises are meant to isolate the two movements so they don't get confused or conjoined in the body. The end result should be the ability to make large position shifts with a relaxed fretting hand comfortably and with confidence.
A couple things should be kept in mind.
You are essentially "programming" yourself. This type of exercise can pay huge dividends quickly if done correctly. It's like a meditation. Be relaxed with no distractions.
When you do either of these don't immediately stop if you get the wrong note. Rather, just relax and objectively state what you just did. This is a form of calibration. This also trains you to play with good clean tone (regardless of what you play) and for performance that is very important. It helps avoid a "wimpy" approach to playing.
Once you get a shift correct, repeat it until you can do several repeats without mistake. Start slow, very slow, and only speed up after you've succeeded.
Sing the note before you attempt to play it. This helps generate a cause and effect relation between what you hear in your head and what your body does.
Stay away from over complicated chords and melodies until you can do these simply moves reliably.
These exercises may seem strange and not very musical but the ides is to program yourself so these movements don't require and observation. Again, similar to walking down the stairs. The good thing is that, if done correctly, they don't take long to do and the effect lasts a long time. You should NOT have to do this as a warm up every day.