Linux - Shell程序设计基本语法

使用双引号的字符

双引号是Shell的重要组成部分

$ echo Hello        World 
Hello World 
$ echo "Hello     World" 
Hello     World

如何显示: Hello “World”
以下命令可以吗?$ echo “Hello “World””
正确方法:echo “Hello \”World\””

条件测试

测试命令
test expression 或 [ expression ]
test命令支持的条件测试
字符串比较
算术比较
与文件有关的条件测试
逻辑操作

str1 = "abc"
if [ $str = "abc" ]; then
  echo "The strings are equal"
else
  echo "The strings are not equal“
 fi
 mkdir temp 
 if [ -d temp ]; then 
 echo "temp is a directory"
 fi

条件语句

形式
if [ expression ]
then
    statements
elif [ expression ]
then
    statements
elifelse
    statements
fi
紧凑形式
; (同一行上多个命令的分隔符)

case语句
当执行append时,有多少种可能的情况出现?

#!/bin/sh
#脚本名: append
case $# 
  1) cat >> $1 ;;
  2) cat >> $2 < $1 ;;
  *) echo ‘usage: $0 [fromFile] toFile‘ ;;
esac
No parameter or more than 2
Only 1 parameter & the file exist
Only 1 parameter & the file not exist
Both file exist
1st exist; 2nd not exist
2nd exist; 1st not exist
Both files not exist

select语句

形式
select item in itemlist
do
    statements
done
作用
生成菜单列表
举例:一个简单的菜单选择程序
#!/bin/sh
clear
select item in Continue Finish
do
    case$itemin
        Continue) ;;
        Finish) break ;;
        *) echo “Wrong choice! Please select again!” ;;
    esac
done
Question: 用while语句模拟?

命令组合语句

分号串联
command1; command2; …
条件组合
AND命令表
         格式:statement1 && statement2 && statement3 && …
OR命令表
         格式:statement1 || statement2 || statement3 || …

函数调用

形式
func()
{
    statements
}
局部变量
local关键字
函数的调用
func para1 para2 …
返回值
return
yesno()
{
    msg=“$1”
    def=“$2while true; do
        echo” ”
        echo$msgread answer
        if [ “$answer” ]; then
        case$answerin
    y|Y|yes|YES)
        return 0
        ;;
    n|N|no|NO)
        return 1
        ;;
    *)
        echo “ ”
        echo “ERROR: Invalid response, expected \”yes\” or \”no\”.”
        continue
        ;;
esac

        else
          return $def
        fi
     done
}
调用函数yesno
if yesno “Continue installation? [n]” 1 ; then
    :
else
    exit 1
fi

杂项命令

break: 从for/while/until循环退出
continue: 跳到下一个循环继续执行
exit n: 以退出码”n”退出脚本运行
return: 函数返回
export: 将变量导出到shell,使之成为shell环境变量
set: 为shell设置参数变量
unset: 从环境中删除变量或函数
trap: 指定在收到操作系统信号后执行的动作
“:”(冒号命令): 空命令
“.”(句点命令)或source: 在当前shell中执行命令

Shell应用举例

编写一个脚本,实现对Linux系统中的用户管理,具体功能要求如下
该脚本添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stuxx(其中xx从01到30)
关键命令
groupadd
useradd
mkdir
chown
chgrp

#!/bin/sh 
i=1
groupadd class1
while [ $i -le 30 ]
do
if [ $i -le 9 ] ;then
username=stu0${i}
else
username=stu${i}
fi
useradd $username 
mkdir /home/$username
chown -r $username /home/$username
chgrp -r class1 /home/$username 
i=$(($i+1))
done

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。