Unix shell范例精解学习笔记(三)

*****************************************************************************************
第一种:
if condition
then 
command1
command2
...
fi

第二种:
if condition
then
command1
command2
...
else command
fi

第三种:if elif else
if condition1
then
command1

elif condition2
then
command2
elif condition3
then
command3
...
fi
****************************************************************************
expr  用来计算表达式的值,expr的每个参数之间必须用空格分隔,特殊字符无需转义
举例:expr "$number" + 0

case语句:
case 变量 in
值1)
命令(命令组)
;;
值2)
命令(命令组)
;;
*)
命令(命令组)
;;
esac


找到与case变量匹配的值,则执行值后面的命令,如果没知道,则执行默认值后的命令,直到esac结束语句退出


关于&
& 放在启动参数后面表示设置此进程为后台进程
       默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个’&’实现这个目的。

********************************************************************************
select循环,注意用于创建菜单
select var in worldlist
do
命令(或命令组)
done

举例:
#!/bin/bash
#Scriptname:runit
ps3="Select a program to execute:"
select program in `ls -F` pwd date
do
$program
done
**********************************************************************************

shif命令,将参量左移指定的次数,未加参数时表示左移一次,移动后,左端的参数被删除
举例:
set joe mary tom sam
shift
echo $*
结果显示:mary tom sam

**********************************************************************************
while condition
do
command
done

举例:
set $(date)  #set命令取得date命令的输出,并把值分别把每一个词组赋给$1~$3这三个位置参量
while (( $#>0 ))
do
echo $1
shift
done

*************************************************************************************
关于while的一个程序例子:当输入的数字不是1~5之前会提示输入错误数字请重新输入,如果是1~5之间的数字,则显示你输入的number并提示游戏结束退出程序

#!/bin/bash
#Scriptname:number
#the Program is Written by fukun yan on 12/9/2016
while :
do
        echo "Please enter a number between 1~5: "
        read num
        case $num in
                1|2|3|4|5)
                echo "Your number is $num!"
                echo "Game is over!"
                break
                ;;
                *)
                echo "It is a wrong number,enter again:"
                continue
                ;;
        esac
done


************************************************************************************


函数
1.unset 函数名      #清除函数
2.export -f 函数名     #导出函数

return   #return命令只能返回0~255之间的整数

*************************************************************************************
*************************************************************************************
本章练习笔记
1.简单的linux命令组成的bash shell脚本
#!/bin/bash
#Scriptname:greetme

#The programe is written by fukun yan,it used to exercise
echo 
"Hello,`logname`"     #问候用户
echo `date`                      #显示日期
echo `cal`                        #显示当月日历
echo `hostname`              #显示主机名
#cat /etc/motd                    #显示当前系统和版本
cd / | ls                            #显示根目录所以文件列表
ps root                              #显示root正在运行的所有进程
echo $TERM;echo $PATH;echo $HOME   #显示环境变量TERM,PATH,HOME的值
echo `du` #显示磁盘的使用信息
echo `id yfk` #显示自己的组ID
echo "Please,could you loan me $50.00?"
echo "Good bye,`logname`,the time is `date +%T`" #和用户说再见,然后告诉他当前时间



2.编写一个名为rename的脚本,这个脚本需要两个参数,两个参数为文件名,如果用户没有提供两个参数则提示脚本的用法,然后退出脚本
$rename
usage:rename oldfilename newfilename


$rename file1 file2
file1 has been renamed fiel2
Here is a listing of the directory:
a file2
b file.bak


脚本如下:
#!/bin/bash
#Scriptname:rename
#The program is written by fukun yan
file1=$1
file2=$2
if 
[ -n "$1"] && [ -n "$2" ]
then
echo "$file1 has been renamed file2"
else
echo " Usage:rename oldfilename newfilename
fi


3.编写一个名为bigfiles的脚本,带两个参数,一个是mtime的值,一个是size的值,如果用户没有提供两个参数,则发送一条合适的信息
备注:此题和上面的题目类似,可以用命令行参数,if语句判断用户是否输入


4.编写一个名为vib的脚本文件,用它来为vi创建备份文件。备份文件的名称是在原始文件的名称后加上后缀.bak
#!/bin/bash
#Scriptname:vib
cat ./vi > vi.bak
echo "good job"


5.编写一个名为nosy的脚本,该脚步执行一下操作:
#!/bin/bash
#Scriptname:nosy
#The program is written by fky
echo "What is your full name?" #询问你的全名
read name #输入全名
set $name #对姓名设置位置参量
echo "Hello,$2 $3 #对你的名字问候
echo "When are you born?" #询问你的出生年
read born #输入出生年
let age=2016-$born #计算你的年龄
echo "Your age is $age" #显示你的年龄
echo -n "Enter your logname:" #询问你的登录用户名
read logname #输入你的登录用户名
echo "Your id is `id $logname` #显示你的用户名ID
echo "Your home directory is $HOME" #显示你的主目录
echo -e "Running program:\n`ps`" #显示本机的所有进程
echo "The day of the week is `date +%A` and the current time is `date +%r%p` " #格式化的显示今天是星期几和当前时间(pm/am格式)


6.编写一个名为checking的脚本来执行如下操作
1)接收一个命令行的参数:用户的登录名
2)检查用户是否提供了命令行参数
3)检查用户是否在/etc/passwd中,如果有则显示:Found <user> in the /etc/passwd
4)如果不在,则显示:no such user on your system
增加内容:如果用户的登录名在/etc/passwd中,再检查是否登录了系统,如果登录了就打印出进程,如果没有显示:<指定用户> is not logged on system

#!/bin/bash
#Scriptname;checking
read -p "please enter your logname:"
[ -n $REPLY ] && grep "$REPLY" /etc/passwd
if [ $? -eq 0 ]
then
echo "Found $REPLY in the /etc/passwd file."
if id $REPLY &> /dev/null
then
echo "`ps $REPLY`"
else
echo "$REPLY is not logged on system."
fi
else
echo "No such user on your system."
fi


7.用let
***************************************************************************
mkdir 创建目录
rmdir 删除空目录
rm    删除文件或目录
touch 创建文件
***************************************************************************

回顾(12.14视频校准_51cto)
#!/bin/bash
#Scriptname:user_words
user_words() {
"Hi,`logname`,welcome to come here,is your first day to learning!enjoy your job!"
}
[ $UID -eq 0 ] && echo "0" || echo "1"


整数操作符
-eq #等于
-ne #不等于
-gt #大于
-lt #小于
-ge #大于等于
-le #小于等于


字符串操作符
= #检测两个字符串是否相等,相等返回true
!= #检测两个字符串是否相等,不想等返回true
-z #检测字符串长度是否为0,为0返回true
-n #检测字符串长度是否为0,不为0返回true
str #检测字符串是否为空,不为空返回true


文件测试运算符
-d file #检测文件是否是目录,如果是则返回true
-f file #检测文件是否是普通文件,如果是则返回true
-r file #检测文件是否是可读,如果是则返回true
-w file #检测文件是否可写,如果是则返回true
-x file #检测文件是否可执行,如果是则返回true
-s file #检测文件是否为空(文件大小是否大于0),如果不是则返回true

-e file #检测文件是否存在(包括目录),如果不是则返回true


布尔运算符

#非运算,表达式为true,则返回false

-o #或运算,有一个表达式为true,则返回true

-a #与运算,两个表达式为true,才返回true


逻辑运算符

&& #与运算,逻辑的and

|| #或运算,逻辑的or


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值