Skip to content
Snippets Groups Projects
Commit 3e0b572b authored by Gauthier HEISS's avatar Gauthier HEISS
Browse files

Initial commit

parents
No related branches found
No related tags found
No related merge requests found
output.txt
\ No newline at end of file
# Bash file scorer
Give a score out of 10 to (a) (BA)SH script(s) like other linter, using [Spellcheck](https://www.shellcheck.net)
score.sh 0 → 100755
#!/bin/bash
### Bash file scorer, using shellcheck
### Gauthier HEISS, 24/11/2023
### gauthier.heiss@esiea.fr
###
### Usage : ./score.sh [file]
### If there is no file argument, the scorer will find recurcively all .sh and .bash files
# Clear "output.txt" file
echo "" > output.txt
# If there is no launching argument, find all files
if [[ $# -eq 0 ]]; then
# Run shellcheck on all .sh and .bash files recursively, and append results to output.txt while preserving colors
script -q -c "find . -type f \( -name \"*.sh\" -o -name \"*.bash\" \) ! -name \"score.sh\" -exec shellcheck --color=always {} -o all \;" output.txt
# Count all line of codes in all .sh and .bash files recurcively, ignoring comments and empty lines
count=$(find . -type f \( -name "*.sh" -o -name "*.bash" \) -exec grep -vE '^\s*$|^\s*#' {} \; | wc -l)
else
if [[ -f $1 ]]; then
# Run shellcheck only on asked file
script -q -c "shellcheck --color=always $1 -o all" output.txt
# Count lines in the asked file, ignoring comments and empty lines
count=$(grep -c -vE '^\s*$|^\s*#' "$1")
else
echo -e "\e[31mNo such file or directory \"$1\"\e[0m"
echo "---- Final score: ----"
echo "0.00"
exit
fi
fi
# Line break
echo -e "\n"
# If there is no code, give 0 as score
if [[ ${count} == 0 ]]; then
echo -e "\e[31mNo code to analyze. Do you have .sh or .bash files in this directory or its subdirectories?\e[0m"
echo "---- Final score: ----"
echo "0.00"
exit
fi
# If there is a parsing error (which is fatal), give 0 as score
if grep -q "Parsing stopped here" output.txt; then
echo -e "\e[31mFatal error in parsing\e[0m"
echo "---- Final score: ----"
echo "0.00"
exit
fi
# Count stlye, info, warning and errors
errors=$(grep -c "31m[[:blank:]]*^cl" < output.txt)
warnings=$(grep -c "33m[[:blank:]]*^" < output.txt)
infos=$(grep -c "32m[[:blank:]]*^" < output.txt)
# Displaying errors count
echo "---- Results: ----"
echo "Lines: ${count}"
echo "Errors: ${errors}"
echo "Warnings: ${warnings}"
echo "Style: ${infos}"
# Compute score
score=$(echo "scale=2; 10 - ((5 * ${errors} + ${warnings} + ${infos}) / ${count} * 10)" | bc)
# If score is negative, set to 0
if [[ ${score} == *-* ]]; then
score="0.00"
fi
# Show score
echo -e "\n---- Final score: ----"
echo "${score}"
\ No newline at end of file
#!/usr/bin/env sh
# ranger supports enhanced previews. If the option "use_preview_script"
# is set to True and this file exists, this script will be called and its
# output is displayed in ranger. ANSI color codes are supported.
# NOTES: This script is considered a configuration file. If you upgrade
# ranger, it will be left untouched. (You must update it yourself.)
# Also, ranger disables STDIN here, so interactive scripts won't work properly
# Meanings of exit codes:
# code | meaning | action of ranger
# -----+------------+-------------------------------------------
# 0 | success | success. display stdout as preview
# 1 | no preview | failure. display no preview at all
# 2 | plain text | display the plain content of the file
# 3 | fix width | success. Don't reload when width changes
# 4 | fix height | success. Don't reload when height changes
# 5 | fix both | success. Don't ever reload
# 6 | image | success. display the image $cached points to as an image preview
# 7 | image | success. display the file directly as an image
# Meaningful aliases for arguments:
path="$1" # Full path of the selected file
width="$2" # Width of the preview pane (number of fitting characters)
height="$3" # Height of the preview pane (number of fitting characters)
cached="$4" # Path that should be used to cache image previews
preview_images="$5" # "True" if image previews are enabled, "False" otherwise.
maxln=200 # Stop after $maxln lines. Can be used like ls | head -n $maxln
# Find out something about the file:
mimetype=$(file --mime-type -Lb "$path")
extension=$(/bin/echo "${path##*.}" | awk '{print tolower($0)}')
# Functions:
# runs a command and saves its output into $output. Useful if you need
# the return value AND want to use the output in a pipe
try() { output=$(eval '"$@"'); }
# writes the output of the previously used "try" command
dump() { /bin/echo "$output"; }
# a common post-processing function used after most commands
trim() { head -n "$maxln"; }
# wraps highlight to treat exit code 141 (killed by SIGPIPE) as success
safepipe() { "$@"; test $? = 0 -o $? = 141; }
# Image previews, if enabled in ranger.
if [ "$preview_images" = "True" ]; then
case "$mimetype" in
# Image previews for SVG files, disabled by default.
###image/svg+xml)
### convert "$path" "$cached" && exit 6 || exit 1;;
# Image previews for image files. w3mimgdisplay will be called for all
# image files (unless overriden as above), but might fail for
# unsupported types.
image/*)
exit 7;;
# Image preview for video, disabled by default.:
video/*)
ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;;
esac
fi
case "$extension" in
# Archive extensions:
a|ace|alz|arc|arj|bz|bz2|cab|cpio|deb|gz|jar|lha|lz|lzh|lzma|lzo|\
rpm|rz|t7z|tar|tbz|tbz2|tgz|tlz|txz|tZ|tzo|war|xpi|xz|Z|zip)
try als "$path" && { dump | trim; exit 0; }
try acat "$path" && { dump | trim; exit 3; }
try bsdtar -lf "$path" && { dump | trim; exit 0; }
exit 1;;
rar)
# avoid password prompt by providing empty password
try unrar -p- lt "$path" && { dump | trim; exit 0; } || exit 1;;
7z)
# avoid password prompt by providing empty password
try 7z -p l "$path" && { dump | trim; exit 0; } || exit 1;;
# PDF documents:
pdf)
try pdftotext -l 10 -nopgbrk -q "$path" - && \
{ dump | trim | fmt -s -w $width; exit 0; } || exit 1;;
# BitTorrent Files
torrent)
try transmission-show "$path" && { dump | trim; exit 5; } || exit 1;;
# ODT Files
odt|ods|odp|sxw)
try odt2txt "$path" && { dump | trim; exit 5; } || exit 1;;
# HTML Pages:
htm|html|xhtml)
try w3m -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
try lynx -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
try elinks -dump "$path" && { dump | trim | fmt -s -w $width; exit 4; }
;; # fall back to highlight/cat if the text browsers fail
esac
case "$mimetype" in
# Syntax highlight for text files:
text/* | */xml)
if [ "$(tput colors)" -ge 256 ]; then
pygmentize_format=terminal256
highlight_format=xterm256
else
pygmentize_format=terminal
highlight_format=ansi
fi
try safepipe highlight --out-format=${highlight_format} "$path" && { dump | trim; exit 5; }
try safepipe pygmentize -f ${pygmentize_format} "$path" && { dump | trim; exit 5; }
exit 2;;
# Ascii-previews of images:
image/*)
img2txt --gamma=0.6 --width="$width" "$path" && exit 4 || exit 1;;
# Display information about media files:
video/* | audio/*)
exiftool "$path" && exit 5
# Use sed to remove spaces so the output fits into the narrow window
try mediainfo "$path" && { dump | trim | sed 's/ \+:/: /;'; exit 5; } || exit 1;;
esac
exit 1
#!/bin/bash
## Example: ShellCheck can detect some higher level semantic problems
while getopts "nf:" param
do
case "$param" in
f) file="$OPTARG" ;;
v) set -x ;;
esac
done
case "$file" in
*.gz) gzip -d "$file" ;;
*.zip) unzip "$file" ;;
*.tar.gz) tar xzf "$file" ;;
*) echo "Unknown filetype" ;;
esac
if [[ "$$(uname)" == "Linux" ]]
then
echo "Using Linux"
fi
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment