Linux | Shell编程

Linux | Shell编程

shell编程

shell基本功能

命令解释执行;
文件名替换;
输入输出重定向;
连通管道建立;
系统环境设置;
shell编程
shell编程是shell的基本功能之一。Shell是一个解释语言

特殊字符

*,?,[!- ]:统配符;
<,>,>>,|:I/O重定向符;
;:命令分隔符;
&:命令后台执行;
",',`:三种引号;
`:命令替换;
\:转义字符;
$:变量引用前导符;
{,},[,],(,):括号;
~:波浪号为用户的家目录,与$HOME同

两个整数间关系的测试

-eq:两数相等时为真
-ne:两数不等时为真
-gt:前数大于后数时为真
-ge:前数大于或等于后数时为真
-lt:前数小于后数时为真
-le:前数小于或等于后数时为真

特殊变量

$#:传递给shell程序的变量个数
$-:由set设置的参数串
$?:上一条命令执行返回值
$@:shell程序的所有参数
$$:当前进程的进程号
$*:默认情况下与$@同
$!:最后一次后台执行进程的pid
$n:第n个位置参数,n为小于$#的非负整数

expr:用于对表达式进行算术运算

#expr 5 – 3		#结果为2
#expr 5 \* 4		#结果为20
#xx=5; $xx=`expr $xx + 1` #结果为$xx=6
#x=5; y=6; xy=`expr $x \* $y #结果为xy=30 

Bash的控制结构

if-then-fi结构
        if [ -d "$1" ]			#判断是否为目录
    	then
        	ls $1/*; exit 0		#列目录内容,返回0
    	fi

if-then-elif-else-fi结构
		if test_cmd
		then
			statements
		elif test_cmd
		then
			statements
		fi

case结构
	case var in
	val1)
		cmd11; …; cmd1n1;;
	val2)
		cmd21; …; cmd2n2;;
		… … … … … …
	*)
		default_action;;
	esac

while结构
	while condition
	do
		do_list		# 命令或语句系列
	done

until结构
for结构

实例shell编程

#!/bin/sh
func1( ){		#定义函数func1,用于完成功能1
	echo "This is function1"
}
func2( ){		#定义函数func2,用于完成功能2
	echo "This is function2"
}
while true
do
		clear				#清屏
		echo " 1.功能1    2.功能2    q.退出"
		read x
		case $x in
            1) func1;;
            2) func2;;
            0|Q|q) exit $?;;	# 退出并返回上次的执行结果
            *) echo -e "\a";;	#响铃表示非法输入
		esac
		read x
		# read -p "Press Enter to continue:" x
done 

计算1+…+10

#!/bin/sh
sum=0;x=1
until [ $x -gt 10 ]
do
        sum=`expr $sum + $x`
        x=`expr $x + 1`
done
echo "1+2+...+10=$sum"

计算输入的参数之和

#!/bin/sh
if [ $@ -lt 1]
	then echo "Useage at least 1 arg"
	exit 1
fi
sum=0
for x in $*
do
	sum=`expr $sum + $x`
done
echo "The sum = $sum"
使用即时文档编写一个shell程序,要求:
1、在即时文档内部,进行参换或命令替换,显示操作者的用户名,并提示操作者输入一个用户名。
2、接收用户从键盘读入一个字符串,并与系统中已创建的用户相比较,若不是则显示错误“XX is not a user”并返回1;
3、然后与系统中已登录的用户相比较,若是其中的某一个则输出“you are logined”,否则输出“You are not in system now!”。

here文件示例程序

echo "This is a Here-Document demonstrator!"
cat << !
	-----Here-File begine-----
	I am "`whoami`", and who are you? please tell me.
!
# << 符号后面的 ! 是一个分界符,表示开始一个 Here-Document,Here-Document 可以用于在 shell 脚本中嵌入一段文本。
read x; cut -d: -f1 /etc/passwd | grep $x > /dev/null
# 如果匹配成功,则grep将返回0,否则返回非零值。
# 检查输入的字符串是否是系统上的有效用户名。如果输入的字符串匹配到了一个有效的用户名,那么这个命令将不会输出任何东西,否则会输出错误信息

if [ $? -ne 0 ]; then echo "$x is not a user"; exit 1; fi
y=`who | awk '{ print $1 }'`
# 获取当前登录系统的用户的用户名
for z in $y;	do
case $z  in
	$x)  v=$x;;
	 *)   v="---------";;			# *) 表示如果没有一个 case 模式与变量匹配
esac;		done
# for 循环遍历这些用户名,判断是否与变量 $x 的值相同。
if [ $x = $v ]; then echo "Your are logined!"
else echo "You are not in system now!"
fi

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值