Shell Script For Running Commands In Users Home Directory
Sometimes we won’t run command one by one on linux, moreover command complicated and we must typed length.
But in here will be exemplified, this simple shell script for run commands in users home.
Shell script that run linux commands in all users home directories and outputs its results. Scripts accepts user name and command as the argument.
Shell Script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#Next line tell with shell to use
#!/bin/bash
#we store in variable path to file
UserListFile=/tmp/user.list
#We create function with name Usage
Usage () {
#printing help
echo "$0 - execute command in all HOME directories
usage: $0 [-a] command [arg ...]
-a: process HOME directories of all users
The given command will be executed with the arguments specified in the
home directory of users.
#exit from program
exit 1
#end of function
}
#we check if there less than 1 parameter
if [ $# -lt 1 ]
then
#if less – print help
Usage
#in other case
else
#we check passed parameters, starting from first
case "$1" in
#if parameter -a then we write to All variable value true
-a) All=true
#removing parameter
shift ;;
#if parameter starting with -, and not -a, we print help
-*) Usage ;;
#exit from case
esac
#exit from fi loop
fi
#we check if user pass -a as parameter
if [ "$All" = true ]
#if -a passed
then
#we get list of all users
cat /etc/passwd | cut -d':' -f1 | sed -e 's/:/ /g' > $UserListFile
# in other case
else
#print message
echo "Please enter users, type [ to exit"
#cleaning file with userlist
echo -n > $UserListFile
#starting while loop to read users
while read UserName Rest
do
#if user print [ to exit loop
if [ $UserName = "[" ]; then
#exit from loop
break
#if user print other data
else
#we check if user put any symbol
test -z "$UserName" && continue
#we check if user exist
grep "^$UserName" /etc/passwd > /dev/null || {
#if not exist print message to user
echo "Can't find user ${UserName}; ignored."
#we continue loop
continue
}
#if user exist – we store it to userfile
echo $UserName >> $UserListFile
#exit of if loop
fi
#exit from reading user input
done
#exit from if loop
fi
#just print empty line
echo ""
#stop all other parameters as command we need to run
Command="$@"
#getting list of users
UserList=`cat $UserListFile`
#getting user one by one from list
for user in ${UserList}
do
#one more empty line
echo ""
#getting user home directory
HomeDir=`grep "^$user" /etc/passwd | cut -d":" -f6`
# we check if we have read and execute permissions to cd and run command
[ -r "$HomeDir" -a -x "$HomeDir" ] || {
# if not just warn user
echo "Read or execute of folder $HomeDir denied"
continue
#exit of check
}
#we telling user about what command we run and inside what directory
echo "Runnig $Command inside $HomeDir"
#entering home
cd $HomeDir
#running command
$Command
#cleaning, removing temp files
rm -rf $UserListFile
Script Output
1
./exec_home.sh lsPlease enter users, type exit to exitsshdyevhenexitRunnig ls inside /var/run/sshdRunnig ls inside /home/darkstarDesktop Downloads examples.desktop Pictures TemplatesDocuments Dropbox Music Public Videos
Maybe that my explain for write Shell Script, and i’m still learning for this script can be said iam newbie. So if you want learning, please. Because learning not need younger, smart or experience and other the most important we still understand.
“There is a will there is a way”
Thanks, may be useful and good luck!!!
This post is licensed under CC BY 4.0 by the author.