Change the password for the user (as root):
passwd username
Reset the login counter and unlock the user:
chsec -f /etc/security/lastlog -a "unsuccessful_login_count=0" -s username
chuser "account_locked=false" username
Change the password for the user (as root):
passwd username
Reset the login counter and unlock the user:
chsec -f /etc/security/lastlog -a "unsuccessful_login_count=0" -s username
chuser "account_locked=false" username
This simple procedure takes 3 arguments as the parameters:
It prints the text to the terminal in selected colors.
[cc lang=”bash”]
function print_color {
local text=$1
local fg=$2
local bg=$3
case “$fg” in
red) fg=”31m” ;;
green) fg=”32m” ;;
yellow) fg=”33m” ;;
blue) fg=”34m” ;;
white) fg=”37m” ;;
black) fg=”30m” ;;
*) fg=”37m” ;;
esac
case “$bg” in
red) bg=”41m” ;;
green) bg=”42m” ;;
yellow) bg=”43m” ;;
blue) bg=”44m” ;;
white) bg=”47m” ;;
black) bg=”40m” ;;
*) bg=”40m” ;;
esac
echo -en “\033[${fg}\033[${bg}${text}\033[0m”
}
[/cc]
It’s very simple to rename the files to lowercase/uppercase using awk:
Lowercase
[cc lang=”bash”]
ls -1rt | awk ‘{ printf(“mv %s %s\n”, $0, tolower($0)) | “sh” } END { close(“sh”) }’
[/cc]
Uppercase
[cc lang=”bash”]
ls -1rt | awk ‘{ printf(“mv %s %s\n”, $0, toupper($0)) | “sh” } END { close(“sh”) }’
[/cc]
print -n "Enter Your password:"
stty_orig=`stty -g`
trap "stty ${stty_orig}; exit" 1 2 3 15
stty -echo >&- 2>&-
read PASS
stty ${stty_orig} >&- 2>&-
trap 1 2 3 15
print
trap :catches interruptions. I.e. if the user presses Ctrl+C, the normal stty mode is set before stopping the program
stty -echo :switches off the display echo
>&- 2>&- :helps to avoid “stty: Not a typewriter” message for non-interactive scripts.
It’s not possible to get the value of the loop variables in some versions of ksh.
Example:
#!/bin/ksh
num=0
cat $0 | while read line ; do
let num=num+1
done
echo "Number=$num"
This script will return “Number=0” as the result on some Linux machines.
Here is the workaround for the problem: You should change the redirection method for the input file.
#!/bin/ksh
l=0
while read line ; do
let l=l+1
done < $0
echo "Number=$l"
The last script will return the correct result: "Number=9"
Another possibility is to use the named pipe:
#!/bin/ksh
TMPPIPE=/tmp/thepipe.$$
mkfifo $TMPPIPE
cat $0 > $TMPPIPE &
num=0
while read line ; do
let num=num+1
done < $TMPPIPE
echo "Number=$num"
ls -1 | cpio -o | cpio -ivt | awk '{print $NF, $(NF-1), $(NF-4), $(NF-3) }'
Warning: I/O expensive for the large files!
Perl:
@a = localtime((stat($my_file))[9]); $a[4]++;
printf "%02d%02d%02d",@a[5,4,3];
If the whole output of the complex script should be redirected to the log, the following trick could be used.
if [ "$1" != "-log" ] ; then
$0 -log "$@" 2>&1 | tee the_log_file.$$.log
echo "The log file for the current session: the_log_file.$$.log"
exit 0
fi
shift # remove "-log" parameter
Here is very simple trick to force the grep command to display file name, when it’s used together with find operation.
Just write /dev/null as the “second file”
find . -type f -exec grep somestring {} /dev/null \;
Here is the small reminder about the syntax of the “case” command and the usage of the pattern lists.
#!/bin/ksh
print -n "Please enter the line: "
read line
case "$line" in
?(dog|cat) ) print "zero or one occurrence of any pattern" ;;
*(low|high) ) print "zero or more occurrences of any pattern" ;;
@(duncan|methos) ) print "exactly one occurrence of any pattern" ;;
+(rudolph|blitzen) ) print "one or more occurrence of any pattern" ;;
!(grinch|babay) ) print "everything except patterns" ;;
-@([hH?]) ) print "Some help..." ;;
-v*(erbose) ) print "Some more words..." ;;
*) print "Something else..." ;;
esac
echo $PATH| awk -v RS=":" '{ print $0 }'
echo $LD_LIBRARY_PATH |awk -v RS=":" '{ system ( "ls -rltd " $0 ) }'
Warning!
As far as the option ‘-v’ is used, the new awk(nawk in some systems) should be used.
To check if the new version of awk is installed:
awk 1 /dev/null
The output will be empty for new awk.
You have the old awk, if the output is something like
awk: syntax error near line 1
In this case nawk should be used instead awk
MS-DOS modification: echo %PATH% | awk -v RS=”;” “{ print $0 }”