I am trying to update the file permission oftest_1.txt available as content inside the main file test.txt based on the value available in the variable IN. Below script will help to modify the content as per my requirement. But I need to reduce the number of lines of code. so could you suggest any way to reduce the number of lines and achieve the same output.
Code
#!/bin/bash
IN=750
Input=test.txt
Char_one=$(echo $IN | cut -c 1)
Char_two=$(echo $IN | cut -c 2)
Char_three=$(echo $IN | cut -c 3)
if [[ "$Char_one" == "7" ]]; then
Char_one="rwx"
elif [[ "$Char_one" == "6" ]]; then
Char_one="rw-"
elif [[ "$Char_one" == "5" ]]; then
Char_one="r-x"
elif [[ "$Char_one" == "4" ]]; then
Char_one="r--"
elif [[ "$Char_one" == "3" ]]; then
Char_one="-wx"
elif [[ "$Char_one" == "2" ]]; then
Char_one="rwx"
elif [[ "$Char_one" == "1" ]]; then
Char_one="-w-"
elif [[ "$Char_one" == "0" ]]; then
Char_one="---"
fi
if [[ "$Char_two" == "7" ]]; then
Char_two="rwx"
elif [[ "$Char_two" == "6" ]]; then
Char_two="rw-"
elif [[ "$Char_two" == "5" ]]; then
Char_two="r-x"
elif [[ "$Char_two" == "4" ]]; then
Char_two="r--"
elif [[ "$Char_two" == "3" ]]; then
Char_two="-wx"
elif [[ "$Char_two" == "2" ]]; then
Char_two="rwx"
elif [[ "$Char_two" == "1" ]]; then
Char_two="-w-"
elif [[ "$Char_two" == "0" ]]; then
Char_two="---"
fi
if [[ "$Char_three" == "7" ]]; then
Char_three="rwx"
elif [[ "$Char_three" == "6" ]]; then
Char_three="rw-"
elif [[ "$Char_three" == "5" ]]; then
Char_three="r-x"
elif [[ "$Char_three" == "4" ]]; then
Char_three="r--"
elif [[ "$Char_three" == "3" ]]; then
Char_three="-wx"
elif [[ "$Char_three" == "2" ]]; then
Char_three="rwx"
elif [[ "$Char_three" == "1" ]]; then
Char_three="-w-"
elif [[ "$Char_three" == "0" ]]; then
Char_three="---"
fi
while IFS= read -r line;
do
j=1
perm_1=$(echo $line | awk '{print $1}' | cut -c 2-4)
perm_2=$(echo $line | awk '{print $1}' | cut -c 5-7)
perm_3=$(echo $line | awk '{print $1}' | cut -c 8-10)
Def_Chmod=$(echo "$line" | sed -i "$j s/$perm_1$perm_2$perm_3/$Char_one$Char_two$Char_three/;" "$Input")
j=$((j+1))
done <"$Input"
test.txt
-rwxrwxr-x test_1.txt
Output
Content of the test.txt file after the execution of the above code.
-rwxr-x--- test_1.txt
Aucun commentaire:
Enregistrer un commentaire