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
elif …
else
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 “$item” in
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=“$2”
while true; do
echo” ”
echo “$msg”
read answer
if [ “$answer” ]; then
case “$answer” in
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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。