What have done this week
To split a shell script into concatenated commands, i need to find the seperators which are
1. ;("A ; B" Run A and then B, regardless of success of A)
2. &&("A && B" Run B if A succeeded)
3. ||("A || B" Run B if A failed)
Besides, i added more seperators while spliting:
1. :;(stands for TRUE, can be skipped while spliting)
2. | (pipe)
During the parse, i have met a situation where the seperator is in a quoted string. In this case, the seperator should not be splited, so we need to skip single and double quote in the script.
I use Backtracking Control Verbs to solve this issue. It can be used to skip certain pattern while matching. Here is the templete:
unwanted_pattern(*SKIP)(*F)|wanted_pattern
The regex engine will first match the unwanted part, after matched, it will have a bracktrack. During this period, the engine come to (*SKIP)(*F) which indicated abandoning matchinng result and jumping to the rest of text to continue match. So we can use this to skip single and double quote and combined to split shell script.
TO DO
1. Split the concatenated into variable, command, branch and loop.
2. Extract info from loop.
3. Parse the command.