題目

練習:
使用date單獨獲取系統當前的年份、月份、日、小時、分鐘、秒

#date "+%Y-%m-%d %H:%M:%S"

練習:
1、echo是內部命令還是外部命令?

#type echo
2、其作用?

Output the ARGs

3、如何顯示“The year is 2013. Today is 26.”爲兩行?

#echo -e "The year is 2013. \nToday is 12."

練習:
1、printf是內部命令還是外部命令?

    #type printf

2、其作用?

printf formats and prints ARGUMENTS under control of the FORMAT.

3、如何顯示“The year is 2013. Today is 26.”爲兩行?
       #printf "The year is 2014.\nToday is 12."

練習:
1、創建目錄
(1)在/mnt下創建boot和sysroot;

#mkdir -p /mnt/{boot,sysroot}
(2)在/mnt/boot下創建grub;
#mkdir -p  /mnt/boot/grub
(3)在/mnt/sysroot下創建proc, sys, bin, sbin, lib, usr, var, etc, dev, home, root, tmp
a)在/mnt/sysroot/usr下創建bin, sbin, lib
b)在/mnt/sysroot/lib下創建modules
c)在/mnt/sysroot/var下創建run, log, lock
d)在/mnt/sysroot/etc下創建init.d

#mkdir -p /mnt/sysroot/{proc,sys,bin,sbin,lib/modules,usr/{bin,sbin,lib},var/{run,log,lock},etc/init.d,dev,home,root,tmp}

1、創建目錄/backup

mkdir /backup

2、複製目錄/etc至/backup目錄中,並重命名爲“etc-當前日期”,如etc-2013-02-26;要求保留文件原來的屬性,保持鏈接文件;

#cp -a /etc/ /mnt/etc-`date +%Y-%m-%d`

作業2:
1、思考:ls命令是否可以顯示某目錄的整體大小,即包括其內部的所有文件的整體大小?

#du -sh

2、通過幫助手冊,學習使用du命令;

#man du

練習:
1、創建a123, cd6, c78m, c1 my, m.z, k 67, 8yu, 789等文件;注意,以上文件是以逗號隔開的,其它符號都是文件名的組成部分;
2、顯示所有以a或m開頭的文件;

#ls [am]*

3、顯示所有文件名中包含了數字的文件;

#ls *[0-9]*

4、顯示所有以數字結尾且文件名中不包含空白的文件;

#ls *[^[:space:]]*[0-9]

5、顯示文件名中包含了非字母或數字的特殊符號的文件;

#ls [^0-9a-zA-Z]


練習:
1、創建一個用戶mandriva,其ID號爲2002,基本組爲distro(組ID爲3003),附加組爲linux;

#useradd -u 2002 -g distro  -G linux  mandriva

2、創建一個用戶fedora,其全名爲Fedora Community,默認shell爲tcsh;

useradd -c "Fedora Community" -s /bin/tcsh fedora

3、修改mandriva的ID號爲4004,基本組爲linux,附加組爲distro和fedora;

#usermod -u 4004 -g linux -a -G distro,fedora mandriva

4、給fedora加密碼,並設定其密碼最短使用期限爲2天,最長爲50天;

#passwd -n 2 -x 50 fedora
#echo "mylove" | passwd --stdin fedora

5、將mandriva的默認shell改爲/bin/bash;

#usermod -s /bin/bash mandriva

6、添加系統用戶hbase,且不允許其登錄系統;

#useradd -s /bin/nologin hbase


練習:
1、新建一個沒有家目錄的用戶openstack;

#useradd -M openstack

2、複製/etc/skel爲/home/openstack;

#useradd -M openstack

3、改變/home/openstack及其內部文件的屬主屬組均爲openstack;

#chown -R openstack:openstack /home/openstack

4、/home/openstack及其內部的文件,屬組和其它用戶沒有任何訪問權限

#chmod -R 700 /home/openstack


練習:
1、統計/usr/bin/目錄下的文件個數;

#ls /usr/bin/ | wc -l

2、取出當前系統上所有用戶的shell,要求,每種shell只顯示一次,並且按順序進行顯示;

#cat /etc/passwd | cut -d: -f7 | sort -u  | sed /^$/d

3、思考:如何顯示/var/log目錄下每個文件的內容類型?

#file `ls /var/log `

4、取出/etc/inittab文件的第6行;

#cat /etc/inittab | head -6 | tail -1

5、取出/etc/passwd文件中倒數第9個用戶的用戶名和shell,顯示到屏幕上並將其保存至/tmp/users文件中;

#cat  /etc/passwd | tail -9  | head -1 | cut -d: -f1,7 | tee /tmp/users

6、顯示/etc目錄下所有以pa開頭的文件,並統計其個數;

#ls  -d /etc/pa*  | wc -l


7、不使用文本編輯器,將alias cls=clear一行內容添加至當前用戶的.bashrc文件中;

#echo "alias cls=clear" >> ~/.bashrc


練習:
1、顯示/proc/meminfo文件中以不區分大小的s開頭的行;

#cat /proc/meminfo | grep  -i ^s

2、顯示/etc/passwd中以nologin結尾的行;

#cat /etc/passwd | grep  "nologin$"

取出默認shell爲/sbin/nologin的用戶列表

#cat /etc/passwd | grep  "nologin$" | cut -d: -f1

取出默認shell爲bash,且其用戶ID號最小的用戶的用戶名

#cat /etc/passwd | grep  "bash$" | sort -t: -k3 | cut -d: -f1 | head -1


3、顯示/etc/inittab中以#開頭,且後面跟一個或多個空白字符,而後又跟了任意非空白字符的行;

#grep --color "^#[[:space:]]\{1,\}[^[:space:]]" /etc/inittab


4、顯示/etc/inittab中包含了:一個數字:(即兩個冒號中間一個數字)的行;


#grep ":[[:alnum:]]:" /etc/inittab

5、顯示/boot/grub/grub.conf文件中以一個或多個空白字符開頭的行;

#grep  "^[[:space:]]\{1,\}" /boot/grub/grub.conf

6、顯示/etc/inittab文件中以一個數字開頭並以一個與開頭數字相同的數字結尾的行;

#grep "^\([[:alnum:]]\).*\1$" /etc/inittab


練習:
1、找出 /proc/cpuinfo 文件中的,1位數,或2位數 並用顏色顯示出來;

#egrep  --colour "[0-9]|[0-9][0-9]"  /proc/cpuinfo

2、找出ifconfig命令結果中的1-255之間的整數;

# ifconfig | egrep "\<[0-9]\>|\<[1-9][0-9]\>|\<1[0-9][0-9]\>|\<2[0-4][0-9]\>|\<25[0-5]\>"

3、查找當前系統上名字爲root(必須出現在行首)的用戶的帳號的相關信息, 文件爲/etc/passwd


#cat /etc/passwd | grep "^root" | cut -d: -f5

練習:分析/etc/inittab文件中如下文本中前兩行的特徵(每一行中出現在數字必須相同),請寫出可以精確找到類似兩行的模式:
l1:1:wait:/etc/rc.d/rc 1
l3:3:wait:/etc/rc.d/rc 3

#grep  "^[[:alpha:]]\([[:alnum:]]\):\1:.*\1$" /etc/inittab


4、顯示所有以數字結尾且文件名中不包含空白的文件;

#ls *[^[:space:]]*[0-9]


找出/boot/grub/grub.conf文件中1-255之間的數字;


#egrep "\<[0-9]\>|\<[1-9][0-9]\>|\<1[0-9][0-9]\>|\<2[0-4][0-9]\>|\<25[0-5]\>"  /boot/grub/grub.conf


練習:寫一個腳本,完成以下任務
1、添加5個用戶, user1,..., user5
2、每個用戶的密碼同用戶名,而且要求,添加密碼完成後不顯示passwd命令的執行結果信息;
3、每個用戶添加完成後,都要顯示用戶某某已經成功添加;


#!/bin/bash

for i in {1..5}
do
if `id user$i &> /dev/null` ;then
 echo "The user$i is exist."
else
 useradd user$i
 echo "user$i" | passwd --stdin user$i &> /dev/null
 echo "new user finish."
fi
done



條件判斷:
如果用戶不存在
 添加用戶,給密碼並顯示添加成功;
否則
 顯示如果已經沒在,沒有添加;


如果用戶user6不存在,就添加用戶user6


如果/etc/inittab文件的行數大於100,就顯示好大的文件;


#[ `wc -l /etc/inittab | cut -d' ' -f1` -gt 100 ] && echo "large file."


如果用戶存在,就顯示用戶已存在;否則,就添加此用戶;

如果用戶不存在,就添加;否則,顯示其已經存在;


如果用戶不存在,添加並且給密碼;否則,顯示其已經存在;


練習,寫一個腳本,完成以下要求:
1、添加3個用戶user1, user2, user3;但要先判斷用戶是否存在,不存在而後再添加;
2、添加完成後,顯示一共添加了幾個用戶;當然,不能包括因爲事先存在而沒有添加的;
3、最後顯示當前系統上共有多少個用戶;


#!/bin/bash
num=0
for I in `seq 1 $#`
do
       if `id $1 &> /dev/null`
       then
               echo "This user is esxit."
       else
               useradd $1
               let num=$num+1
       fi
       shift
done
echo "new users $num"



練習,寫一個腳本,完成以下要求:
給定一個用戶:
1、如果其UID爲0,就顯示此爲管理員;
2、否則,就顯示其爲普通用戶;

如果 UID爲0;那麼
 顯示爲管理員
否則
 顯示爲普通用戶


#!/bin/bash

if  ! `id $1 &> /dev/null`
then
echo "this is not user."
exit 8
fi

if [ `id -u $1` -eq 0 ]
then
echo "this is root."
else
echo "this is user."
fi


練習:寫一個腳本
判斷當前系統上是否有用戶的默認shell爲bash;
  如果有,就顯示有多少個這類用戶;否則,就顯示沒有這類用戶;


#!/bin/bash

if [ `grep "bash$" /etc/passwd | wc -l` -gt 0 ]
then
echo "`grep "bash$" /etc/passwd | wc -l` shells is bash."
else
echo "no user shell is bash"
fi


練習:寫一個腳本
判斷當前系統上是否有用戶的默認shell爲bash;
  如果有,就顯示其中一個的用戶名;否則,就顯示沒有這類用戶;


練習:寫一個腳本
給定一個文件,比如/etc/inittab
判斷這個文件中是否有空白行;
如果有,則顯示其空白行數;否則,顯示沒有空白行


#!/bin/bash

if [ `grep "^$" /etc/inittab | wc -l` -gt 0 ]    
then
       echo "`grep "^$" /etc/inittab | wc -l`"
else
       echo "no space."
fi


練習:寫一個腳本
給定一個用戶,判斷其UID與GID是否一樣
如果一樣,就顯示此用戶爲“good guy”;否則,就顯示此用戶爲“bad guy”。


#!/bin/bash

if [  `id -u $1` -eq `id -g $1` ]
then
echo "good guy"
else
echo "bad guy"
fi


進一步要求:不使用id命令獲得其id號;

#!/bin/bash

if [ `grep "^$1" /etc/passwd | cut -d':' -f3 ` -eq `grep "^$1" /etc/passwd | cut -d':' -f4` ]
then
echo "good guy"
else
echo "bay guy"
fi


161729  145557 7 5

1397341683

練習:寫一個腳本
給定一個用戶,獲取其密碼警告期限;
而後判斷用戶密碼使用期限是否已經小於警告期限;
提示:計算方法,最長使用期限減去已經使用的天數即爲剩餘使用期限;

如果小於,則顯示“Warning”;否則,就顯示“OK”。


#!/bin/bash

nowtime=`date +%s`
nowday=$[$nowtime/86400]
olday=`grep "$1" /etc/shadow | cut -d':' -f3`
diffday=$[$nowday-$olday]
wrongday=`grep "$1" /etc/shadow | cut -d':' -f6`
longday=`grep "$1" /etc/shadow | cut -d':' -f5`
if [ $[$longday-$diffday] -gt $wrongday ]
then
echo "OK"
else
echo "warning"
fi



練習:寫一個腳本
判定命令歷史中歷史命令的總條目是否大於1000;如果大於,則顯示“Some command will gone.”;否則顯示“OK”。


history | tail -1 | cut -d' ' -f3


練習:寫一腳本
能接受一個參數(文件路徑)
判定:此參數如果是一個存在的文件,就顯示“OK.”;否則就顯示"No such file."

#!/bin/bash

if [ -e $1 ]
then
echo "OK"
else
echo "No such file."
fi



練習:寫一個腳本
給腳本傳遞兩個參數(整數);
顯示此兩者之和,之乘積;

#!/bin/bash

if [ $# -ne 2  ]
then
echo "Please input two int."
exit 8
fi
sum=$[$1+$2]
mul=$[$1*$2]
echo "sum is $sum"
echo "mul is $mul"



練習:寫一個腳本,完成以下任務
1、使用一個變量保存一個用戶名;
2、刪除此變量中的用戶,且一併刪除其家目錄;
3、顯示“用戶刪除完成”類的信息;


#!/bin/bash

user=$1
if [ ! `id $user` ]
then
echo "this user is not exsit."
exit 8
fi

userdel -r $user
echo "$user is del finish."



sed練習:
1、刪除/etc/grub.conf文件中行首的空白符;

#sed  /^[[:space:]]/d /etc/grub.conf

2、替換/etc/inittab文件中"id:3:initdefault:"一行中的數字爲5;

sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab

3、刪除/etc/inittab文件中的空白行;

#sed '/^$/d' /etc/inittab

4、刪除/etc/inittab文件中開頭的#號;

#sed 's/^#//g' /etc/inittab

5、刪除某文件中開頭的#號及後面的空白字符,但要求#號後面必須有空白字符;

#sed 's/^#[[:space:]]*//g' /etc/inittab

6、刪除某文件中以空白字符後面跟#類的行中的開頭的空白字符及#


7、取出一個文件路徑的目錄名稱;

echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'
基名:
echo "/etc/rc.d/" | sed -r 's@^/.*/([^/]+)/?@\1@g'

練習:
傳遞一個用戶名參數給腳本,判斷此用戶的用戶名跟其基本組的組名是否一致,並將結果顯示出來。

#!/bin/bash

if [ `id -u $1` -eq `id -g $1`  ]
then
echo "good guy"
else
echo "bad guy"
fi


練習:寫一個腳本
傳遞一個參數(單字符就行)給腳本,如參數爲q,就退出腳本;否則,就顯示用戶的參數;


#!/bin/bash

if [ $1 == "q" ]
then
exit 0
else
echo "$1"
fi


練習:寫一個腳本
傳遞一個參數(單字符就行)給腳本,如參數爲q、Q、quit或Quit,就退出腳本;否則,就顯示用戶的參數;


#!/bin/bash

if [ $1 == "q" ]
then
exit 0
elif [ $1 == "Q" ]
then
exit 0
elif [  $1 == "quit" ]
then
exit 0
elif [  $1 == "QUIT" ]
then
exit 0
else
echo "$1"
fi



練習:
傳遞三個參數給腳本,第一個爲整數,第二個爲算術運算符,第三個爲整數,將計算結果顯示出來,要求保留兩位精度。形如:
./calc.sh 5 / 2


#!/bin/bash

echo "scale=2;$1$2$3" | bc


練習:
傳遞3個參數給腳本,參數均爲用戶名。將此些用戶的帳號信息提取出來後放置於/tmp/testusers.txt文件中,並要求每一行行首有行號。

#/bin/bash

for i in `seq  1 $#`
do
string1="$i `grep "^$1" /etc/passwd`"
echo "$string1"  >> /tmp/testusers.txt
shift
done


寫一個腳本:
判斷當前主機的CPU生產商,其信息在/proc/cpuinfo文件中vendor id一行中。
如果其生產商爲AuthenticAMD,就顯示其爲AMD公司;
如果其生產商爲GenuineIntel,就顯示其爲Intel公司;
否則,就說其爲非主流公司;

#!/bin/bash

cpu=`grep "vendor" /proc/cpuinfo  | cut -d':' -f2 | tr -d " "`
if [ $cpu == "AuthenticAMD" ]
then
echo "The CPU is AMD"
elif [ $cpu == "GenuineIntel" ]
then
echo "The CPU is Intel"
else
echo "Non mainstream"
fi




寫一個腳本:
給腳本傳遞三個整數,判斷其中的最大數和最小數,並顯示出來。


#!/bin/bash

max=0
min=0
if [ $1 -ge $2 ]
then
if [ $3 -ge $1  ]
then
 max=$3
 min=$2
else
 max=$1
 [ $3 -ge $2 ]&&min=$2||min=$3
fi
else
if [ $3 -ge $2 ]
then
 max=$3
 min=$1
else
 max=$2
 [ $3 -ge $1 ]&&min=$1||min=$3
fi
fi
echo "Max:$max"
echo "Min:$min"



寫一個腳本:
1、設定變量FILE的值爲/etc/passwd
2、依次向/etc/passwd中的每個用戶問好,並顯示對方的shell,形如:  
Hello, root, your shell: /bin/bash
3、統計一共有多少個用戶
只向默認shell爲bash的用戶問聲好


#!/bin/bash

FILE=/etc/passwd
LINES=`cat $FILE | wc -l`
for i in `seq 1 $LINES`
do
users=`cat $FILE | head -$i | tail -1 | cut -d':' -f1`
shells=`cat $FILE | head -$i | tail -1 | cut -d':' -f7`
if [  $shells == "/bin/bash" &> /dev/null  ]
then
 echo "Hello $users,you shell is $shells"
fi
done
echo "Have $i users."




寫一個腳本:
1、添加10個用戶user1到user10,密碼同用戶名;但要求只有用戶不存在的情況下才能添加;


#!/bin/bash

for i in {1..10}
do
if  ! `id user$i &> /dev/null`
then
 useradd  user$i
 echo "user$i" | passwd --stdin user$i &> /dev/null
fi
done


擴展:
接受一個參數:
add: 添加用戶user1..user10
del: 刪除用戶user1..user10
其它:退出


#!/bin/bash

if [ $1 == '-add'  ]
then
for i in {1..10}
do
 if  ! `id user$i &> /dev/null`
 then
  useradd  user$i
  echo "user$i" | passwd --stdin user$i &> /dev/null
 fi
done
elif [ $1 == '-del' ]
then
for i in {1..10}
do
 if  `id user$i &> /dev/null`
 then
  userdel -r  user$i
 fi
done
else
exit 8
fi


自定義用戶adminusers user1,user2,user3,hello,hi


#!/bin/bash

if [ $1 == '-add'  ]
then
shift
for i in `seq 1 $#`
do
 if  ! `id $1 &> /dev/null`
 then
  useradd  $1
  echo "$1" | passwd --stdin $1 &> /dev/null
  shift
 else
  echo "The user $1  is exsit."
  shift
 fi
done
elif [ $1 == '-del' ]
then
shift
for i in `seq 1 $#`
do
 if  `id $1 &> /dev/null`
 then
  userdel -r  $1
  shift
 else
  echo "The user $1 is no exsit."
  shift
 fi
done
else
exit 8
fi


寫一個腳本:
計算100以內所有能被3整除的正整數的和;
取模,取餘:%
3%2=1
100%55=45

#!/bin/bash
sum=0
for i in {1..100}
do
if [ $[$i%3] -eq 0 ]
then
 sum=$[$sum+$i]
fi

done
echo "Sum is $sum."



寫一個腳本:
計算100以內所有奇數的和以及所有偶數的和;分別顯示之;

#!/bin/bash
oddsum=0
evensum=0
for i in {1..100}
do
if [ $[$i%2] -eq 0 ]
then
 evensum=$[$evensum+$i]
else
 oddsum=$[$oddsum+$i]
fi
done
echo -e "The evensum is $evensum.\n The oddsum is $oddsum."


寫一個腳本,分別顯示當前系統上所有默認shell爲bash的用戶和默認shell爲/sbin/nologin的用戶,並統計各類shell下的用戶總數。顯示結果形如:
BASH,3users,they are:
root,redhat,gentoo

NOLOGIN, 2users, they are:
bin,ftp


#!/bin/bash

bashshell=/bin/bash
noshell=/bin/nologin

bashsum=`grep "bash$" /etc/passwd | wc -l`
nosum=`grep "nologin$" /etc/passwd | wc -l`

bashuser=`grep "bash$" /etc/passwd | cut -d':' -f1 | tr "\n" "," | sed 's/,$//'`
nouser=`grep "nologin$" /etc/passwd | cut -d':' -f1 | tr "\n" "," | sed 's/,$//'`

echo -e "BASH, $bashsum users , they are \n $bashuser "
echo -e "NOLOGIN, $nosum users , they are \n $nouser "



練習:將/etc/yum.repos.d/server.repo文件中的ftp://instructor.example.com/pub替換爲http://172.16.0.1/yum

文件內容如下:
# repos on instructor for cla***oom use

# Main rhel5 server
[base]
name=Instructor Server Repository
baseurl=ftp://instructor.example.com/pub/Server
gpgcheck=0

# This one is needed for xen packages
[VT]
name=Instructor VT Repository
baseurl=ftp://instructor.example.com/pub/VT
gpgcheck=0

# This one is needed for clustering packages
[Cluster]
name=Instructor Cluster Repository
baseurl=ftp://instructor.example.com/pub/Cluster
gpgcheck=0

# This one is needed for cluster storage (GFS, iSCSI target, etc...) packages
[ClusterStorage]
name=Instructor ClusterStorage Repository
baseurl=ftp://instructor.example.com/pub/ClusterStorage
gpgcheck=0



1、查找/var目錄下屬主爲root並且屬組爲mail的所有文件;

#find /var -user root -group mail

2、查找/usr目錄下不屬於root,bin,或student的文件;

#find /usr  ! -user root -a ! -user bin  -a ! -user student


3、查找/etc目錄下最近一週內內容修改過且不屬於root及student用戶的文件;

#find /etc/ -mtime -7 ! -user root -a ! -user student


4、查找當前系統上沒有屬主或屬組且最近1天內曾被訪問過的文件,並將其屬主屬組均修改爲root;

#find / -nouser -a -nogroup -a -atime -1 -exec chown root:root {} \;


5、查找/etc目錄下大於1M的文件,並將其文件名寫入/tmp/etc.largefiles文件中;

#find /etc/  -size +1M >> /tmp/etc.largefiles


6、查找/etc目錄下所有用戶都沒有寫權限的文件,顯示出其詳細信息;

#find /etc -not -perm /222 -ls



練習:寫一個腳本
寫一個腳本,顯示當前系統上shell爲-s指定類型的用戶,並統計其用戶總數。-s選項後面跟的參數必須是/etc/shells文件中存在的shell類型,否則不執行此腳本。另外,此腳本還可以接受--help選項,以顯示幫助信息。腳本執行形如:
./showshells.sh -s bash
顯示結果形如:
BASH,3users,they are:
root,redhat,gentoo


如果當前主機的主機名爲空,或者爲(none),或者爲localhost,就將其改爲www.magedu.com


寫一個腳本,利用RANDOM生成10個隨機數,並找出其中的最大值,和最小值;

#!/bin/bash
#declare -i MAX=0
#declare -i MIN=0

MAX=0
MIN=0

for I in {1..10}
do
MYTEST=$RANDOM
[ $I -eq 1 ] && MIN=$MYTEST
if [  $I -le 9 ]
then
 echo -n "$MYTEST,"
else
 echo -n "$MYTEST"
fi
[ $MYTEST -gt $MAX ] && MAX=$MYTEST
[ $MYTEST -lt $MIN ] && MIN=$MYTEST
done
echo -e  "\n $MAX , $MIN"




練習:寫一個腳本showlogged.sh,其用法格式爲:
showlogged.sh -v -c -h|--help
其中,-h選項只能單獨使用,用於顯示幫助信息;-c選項時,顯示當前系統上登錄的所有用戶數;如果同時使用了-v選項,則既顯示同時登錄的用戶數,又顯示登錄的用戶的相關信息;如
Logged users: 4.

They are:
root     tty2         Feb 18 02:41
root     pts/1        Mar  8 08:36 (172.16.100.177)
root     pts/5        Mar  8 07:56 (172.16.100.177)
hadoop   pts/6        Mar  8 09:16 (172.16.100.177)


#!/bin/bash

declare -i shownum=0
declare -i showuser=0

if [ $# -lt 1 ]
then
  echo "Uage: showlogged.sh -v -c -h|--help."
  exit 7
fi
for I in `seq 1 $#`
do
case $1 in
 -h|--help)
  echo "Uage: showlogged.sh -v -c -h|--help."
  exit 0 ;;
 -v|--version)
  let showuser=1
  shift ;;
 -c|--count)
  let shownum=1
  shift;;
 *)

  echo "Uage: showlogged.sh -v -c -h|--help."
  exit 7 ;;
esac
done

if [ $shownum -eq 1 ]
then
echo "Logged users: `who | wc -l`"
if [ $showuser -eq 1 ]
then
 who
fi

fi


練習:寫一個腳本
通過命令行傳遞一個文件路徑參數給腳本:
如果參數多了或少了,報錯;
如果參數指定的路徑對應的是目錄而不是文件,報錯;
而後,檢查路徑指定的文件是否爲空或不存在,如果是,則新建此文件,並在文件中生成如下內容
#!/bin/bash
#
而後,使用vim編輯器打開此文件,並讓光標處於這個文件的最後一行;


寫個腳本,按如下方式執行:
mkscript.sh -v|--version VERSION -a|--author AUTHOR -t|--time DATETIME -d|--description DESCRIPTION -f|--file /PATH/TO/FILE -h|--help

1、此腳本能創建或打開-f選項指向的文件/PATH/TO/FILE;如果其爲空文件,能自動爲其生成第一行;如果文件不空,且第一行不是#!/bin/bash,則中止此腳本,並報錯“The file is not a bash script.";否則,則直接使用vim 打開此文件;
提示:/PATH/TO/FILE,要判斷其目錄是否存在;如果不存在,則報錯;

2、如果爲空文件,自動生成的第一行內容爲:
#!/bin/bash
3、如果爲空文件,且使用了-a選項,則在文件中添加“# Author: -a選項的參數”,比如:
# Author: Jerry
4、如果爲空文件,且使用了-t選項,則在文件中添加“# Date: 腳本執行-t選項後指定的時間”,比如:
# Date: 2013-03-08 18:05
5、如果爲空文件,且使用了-d選項,則在文件中添加“# Description: -d選項的內容”,比如:
# Description: Create a bash script file head.
6、如果爲空文件,且使用了-v選項,則在文件添加“# Version: -v後跟的參數”,比如:
# Version: 0.1
6、-h選項只能單獨使用,用於顯示使用幫助;
7、其它選項,顯示幫助信息;

說明:
這是一個用於創建腳本的腳本,它可以自動幫助創建一個bash腳本的文件頭,這樣,以後使用此腳本來創建其它腳本將變得比較高效。比如:
#!/bin/bash
# Author: Jerry([email protected])
# Date: 2013-03-08 18:05
# Description: Create a bash script file head.
# Version: 0.1
#


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章