diff --git a/strun.sh b/strun.sh new file mode 100644 index 0000000..6b5850a --- /dev/null +++ b/strun.sh @@ -0,0 +1,105 @@ +#takes a language and a a option for file or string. If needed it creates temporary files before it (if needed compiles and) runs the file. + +#IMPORTANT! do add a new language to all three arrays at the same time. + +#array of supported languages, aliases and runner to each language, python c and c++ +languages=( "python" "py" "py3" "python3" "c" "gcc" "c++" "cpp" "g++" ) +#array of supported file types +filetypes=( "py" "py" "py" "py" "c" "c" "cpp" "cpp" "cpp") +#array of runners (claunch is a custom script to take c/cpp files, compile and run, other compiled languages would eigther need to be added to claunch or have their own runners written) +runners=( "python3" "python3" "python3" "python3" "./claunch.sh -f --gcc" "./claunch.sh -f --gcc" "./claunch.sh -f " "./claunch.sh -f " "./claunch.sh -f ") + +#variables +language="" +filetype="" +runner="" +file="" + + +#help message +if [ "$1" = "help" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then + echo "strun uses takes a language and file or string as argument and runs the program using eigther an interpreter or a runner from a list" + echo "Usage: strun.sh [language] [file/string] [option]" + echo "language: language in which the file/string is written" + echo "file/string: either the path to the file or the string to execute" + echo "ls lists supported languages" + echo "option: -f for file, -s for string" + echo "example: strun.sh python3 -f helloworld.py" + echo "example: strun.sh python3 file helloworld.py" + echo "example: strun.sh python3 string \"print('hello world!')\"" + exit 0 +fi + +#ls +if [ "$1" = "ls" ] || [ "$1" = "-l" ] || [ "$1" = "--list" ]; then + echo "Supported languages:" + #print languages file extentions and runners /interpreters + for i in "${languages[@]}" + do + #like this but with the : aligned in the print echo "$i : file .${filetypes[$c]} : cmd ${runners[$c]}" + echo -e "$i \t: file .${filetypes[$c]} \t: runner ${runners[$c]}" + c=$((c+1)) + done + exit 0 +fi + +#check if option is valid +if [ "$2" != "-f" ] && [ "$2" != "-s" ] && [ "$2" != "file" ] && [ "$2" != "string" ]; then + echo "$2 is not a valid option. Use strun.sh help for help." + exit 1 +fi + +#check if language is supported and set runner and filetype +c=0 +for i in "${languages[@]}" +do + if [ "$1" = "$i" ]; then + language="$i" + filetype="${filetypes[$c]}" + runner="${runners[$c]}" + fi + c=$((c+1)) +done + +#check if language is supported +if [ "$language" = "" ]; then + echo "$1 is not a supported language. Use strun.sh ls to list supported languages." + exit 1 +fi + +#if string create file else set file variable to file +if [ "$2" = "-s" ] || [ "$2" = "string" ]; then + file=".strun-temp.$filetype" + echo "$3" > $file +else + file="$3" +fi + +#check if file is of correct filetype +if [ "${file##*.}" != "$filetype" ]; then + echo "$file is not a $filetype file. Use strun.sh ls to list supported languages." + exit 1 +fi + +#check if file exists +if [ ! -f "$file" ]; then + echo "$file does not exist." + exit 1 +fi + +#if print status +echo "language: $language" +echo "filetype: $filetype" +echo "runner: $runner" +echo "file: $file" +echo "file content:" +cat $file +echo "" + +#run file +eval $runner $file + +#remove temp file if created +if [ "$2" = "-s" ] || [ "$2" = "string" ]; then + rm $file +fi