<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Unix Sysadmin &#187; shell script</title>
	<atom:link href="http://www.sysadmindayph.com/blog/tag/shell-script/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sysadmindayph.com/blog</link>
	<description>SysAdmin Blog, TechTips and Reviews</description>
	<lastBuildDate>Fri, 27 Jan 2012 04:36:08 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>KSH Script Basics &#124; Special Shell Variables</title>
		<link>http://www.sysadmindayph.com/blog/ksh-script-basics-special-shell-variables/</link>
		<comments>http://www.sysadmindayph.com/blog/ksh-script-basics-special-shell-variables/#comments</comments>
		<pubDate>Fri, 23 Apr 2010 02:57:31 +0000</pubDate>
		<dc:creator>elizar</dc:creator>
				<category><![CDATA[Commands]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Scripting]]></category>
		<category><![CDATA[Solaris]]></category>
		<category><![CDATA[Unix]]></category>
		<category><![CDATA[if else]]></category>
		<category><![CDATA[if else if]]></category>
		<category><![CDATA[ksh shell]]></category>
		<category><![CDATA[ksh shell script]]></category>
		<category><![CDATA[shell script]]></category>
		<category><![CDATA[special shell variable]]></category>

		<guid isPermaLink="false">http://www.sysadmindayph.com/blog/?p=221</guid>
		<description><![CDATA[Just deleted tons of stale, unsused user accounts. Here are some KSH shell basics and special shell variable. I need to Google them up myself to get reminded that &#8216;$?&#8217; is the output variable for script execution. That is, it&#8217;s 0 for successful execution and 1 if there is any error. Special shell variables There &#8230; <a href="http://www.sysadmindayph.com/blog/ksh-script-basics-special-shell-variables/">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p>Just deleted tons of stale, unsused user accounts. Here are some KSH shell basics and special shell variable. I need to Google them up myself to get reminded that &#8216;$?&#8217; is the output variable for script execution. That is, it&#8217;s 0 for successful execution and 1 if there is any error.</p>
<p><span id="more-221"></span></p>
<p>Special shell variables<br />
There are some variables which are set internally by the shell and which are available to the user:</p>
<p>Name          Description<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
$1 &#8211; $9       these variables are the positional parameters.</p>
<p>$0            the name of the command currently being executed.</p>
<p>$#            the number of positional arguments given to this<br />
              invocation of the shell.</p>
<p>$?            the exit status of the last command executed is<br />
              given as a decimal string.  When a command<br />
              completes successfully, it returns the exit status<br />
              of 0 (zero), otherwise it returns a non-zero exit<br />
              status.</p>
<p>$$            the process number of this shell &#8211; useful for<br />
              including in filenames, to make them unique.</p>
<p>$!            the process id of the last command run in<br />
              the background.</p>
<p>$-            the current options supplied to this invocation<br />
              of the shell.</p>
<p>$*            a string containing all the arguments to the<br />
              shell, starting at $1.</p>
<p>$@            same as above, except when quoted.</p>
<p><strong>Branching</strong><br />
<code>if then fi<br />
if [[ $value -eq 7 ]];then<br />
   print "$value is 7"<br />
fi</code><br />
or:</p>
<p><code>if [[ $value -eq 7 ]]<br />
then<br />
   print "$value is 7"<br />
fi</code>or:</p>
<p><code>if [[ $value -eq 7 ]];then print "$value is 7";fi</p>
<p>if then else fi<br />
if [[ $name = "John" ]];then<br />
   print "Your welcome, ${name}."<br />
else<br />
   print "Good bye, ${name}!"<br />
fi</code></p>
<p><code>if then elif then else fi<br />
if [[ $name = "John" ]];then<br />
   print "Your welcome, ${name}."<br />
elif [[ $name = "Hanna" ]];then<br />
   print "Hello, ${name}, who are you?"<br />
else<br />
   print "Good bye, ${name}!"<br />
fi</code></p>
<p><code>case esac<br />
case $var in<br />
   john|fred) print $invitation;;<br />
   martin)    print $declination;;<br />
   *)         print "Wrong name...";;<br />
esac</code></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p><strong>Looping Command Syntax for Scripts</strong></p>
<p><code>while do done<br />
while [[ $count -gt 0 ]];do<br />
   print "\$count is $count"<br />
   (( count -= 1 ))<br />
done</code><br />
<code>until do done<br />
until [[ $answer = "yes" ]];do<br />
   print -n "Please enter \"yes\": "<br />
   read answer<br />
   print ""<br />
done</code><br />
<code>for var in list do done<br />
for foo in $(ls);do<br />
   if [[ -d $foo ]];then<br />
      print "$foo is a directory"<br />
   else<br />
      print "$foo is not a directory"<br />
   fi<br />
done</code><br />
continue&#8230;break<br />
One can skip the rest of a loop and directly go to the next iteration with: &#8220;continue&#8221;. </p>
<p><code>while read line<br />
do<br />
   if [[ $line = *.gz ]];then<br />
      continue<br />
   else<br />
      print $line<br />
   fi<br />
done</code><br />
One can also prematurely leave a loop with: &#8220;break&#8221;. </p>
<p><code>while read line;do<br />
   if [[ $line = *!(.c) ]];then<br />
      break<br />
   else<br />
      print $line<br />
   fi<br />
done</code></p>
<p>http://www.well.ox.ac.uk/~johnb/comp/unix/ksh.html</p>
<p>Removing accounts from predefine list:</p>
<p><code>#!/bin/ksh</p>
<p>for each in `cat ./list-a`<br />
do<br />
  grep -i $each  /etc/passwd<br />
    if [[ $? -eq 1 ]]; then<br />
        echo "$each does not exists."<br />
        sleep 2<br />
        continue;<br />
    else<br />
        echo "$each exists"<br />
        echo "Deleting account.. "<br />
        sleep 2<br />
        userdel $each<br />
        echo "$each deleted"<br />
        sleep 5<br />
     fi</p>
<p>done</code></p>
<p>Or course, the sleep there is just for aesthetic.. I want to see the screen</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sysadmindayph.com/blog/ksh-script-basics-special-shell-variables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Looping Through a List of Arguments (bourne)</title>
		<link>http://www.sysadmindayph.com/blog/looping-through-a-list-of-arguments-bourne/</link>
		<comments>http://www.sysadmindayph.com/blog/looping-through-a-list-of-arguments-bourne/#comments</comments>
		<pubDate>Fri, 30 May 2008 19:53:36 +0000</pubDate>
		<dc:creator>elizar</dc:creator>
				<category><![CDATA[Scripting]]></category>
		<category><![CDATA[bourne script]]></category>
		<category><![CDATA[for loop]]></category>
		<category><![CDATA[shell script]]></category>

		<guid isPermaLink="false">http://www.sysadmindayph.com/blog/?p=80</guid>
		<description><![CDATA[The Bourne shell for loop looks like this: for arg in list do ...Handle $arg... done Real life application.. # ls -l &#124; awk &#8216;{print$9}&#8217; user01 user02 user03 user04 user05 user06 user07 user08 user09 # pwd /home # for x in `ls -l &#124; awk &#8216;{print$9}&#8217;` &#62; do &#62; chown $x $x &#62; done # &#8230; <a href="http://www.sysadmindayph.com/blog/looping-through-a-list-of-arguments-bourne/">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p>The Bourne shell <em>for</em> loop looks like this:</p>
<pre>    for arg <em>in list</em>
do
...<em>Handle $arg</em>...
done</pre>
<p>Real life application.. <img src='http://www.sysadmindayph.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p># ls -l | awk &#8216;{print$9}&#8217;</p>
<p>user01<br />
user02<br />
user03<br />
user04<br />
user05<br />
user06<br />
user07<br />
user08<br />
user09<br />
# pwd<br />
/home<br />
# for x in `ls -l | awk &#8216;{print$9}&#8217;`<br />
&gt; do<br />
&gt; chown $x $x<br />
&gt; done<br />
# ls -aslt<br />
total 136</p>
<p>.. yeah you know what the output is.. <img src='http://www.sysadmindayph.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.sysadmindayph.com/blog/looping-through-a-list-of-arguments-bourne/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

