SQLite is actually case-insensitive with table and column names as far as they contain only ASCII-characters. It does honor case in names when they are created but you can't have fields "Test" and "tesT" in the same table and if you have a field "Test" it will be found with
SELECT "aTest". But non-ascii characters are case-sensitive in the names of tables and columns which may may you surprised sometimes.
You can test it with these commands:
CREATE TABLE case_test (id);
ALTER TABLE "case_test" ADD COLUMN "a_test"; -- added
ALTER TABLE "case_test" ADD COLUMN "A_test"; -- error, duplicate name
ALTER TABLE "case_test" ADD COLUMN "ä_test"; -- added
ALTER TABLE "case_test" ADD COLUMN "Ä_test"; -- success!
When it comes to your question, as a workaround you could convert all data first into Spatialite with ogr2ogr. Fields are created by default as laundered to lower case http://www.gdal.org/drv_sqlite.html. For updating the names in-place the referenced bash script looks good to me but someone else would probably convert it into a python script.
The Spatialite workaround can be used directly from QGIS. Just open your shapefile and save it into a new Spatialite db through "Save as..".