【unix学习】shell编程—参数、流程控制、算数运算、函数

时间:2022-07-07 22:22:32

shell参数

符号说明

echo $0
$1-$9 代表参数的位置,1代表第一个参数,,,,
$* 把全部参数当作一个字符串形式的参数,"$1 $2 … $n"的形式
$@ 把参数当作列表形式,与$*相同,"$1" "$2""$n" 的形式,注意引号的差别。
$# 参数的个数
$$ 运行的当前进程ID号
$? 显示上一个进程是否执行成功,成功执行返回0,执行不成功返回1
$! 后台运行的最后一个进程的ID号

$* 与 $@ 区别:
相同点:都是引用所有参数。
不同点:只有在双引号中体现出来。
假设在脚本运行时写了三个参数 123,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)。

$* 与$@ 区别

for i in "$*"
do
echo $i
done

#结果#
1 2 3

for i in "$@"
do
echo $i
done

#结果#
1
2
3

变量赋值

[s14516@gdufs]$name="koo" #赋值之间别有空格
[s14516@gdufs]$echo name
name
[s14516@gdufs]$echo $name
koo

shell脚本

#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

if语句

#!/bin/bash
read input
if [ $input = "gdufs" ]
then
echo "right"
else
echo "wrong"
fi

case语句

#!/bin/bash
hour=`date "+%H"`
case $hour in
[0-8]|19|2[0-3])
echo "good night"
;;
9|1[0-2])
echo "good morning"
;;
1[3-8])
echo "good afternoon"
;;
*) #表示其他情况
esac

循环

for name in zhangsan lisi wangwu
do
echo $name
done

expr 算数表达

1.四则运算

+ - \* / %
这小表达式两边需要有空格
[s14516@gdufs]$expr 4 \* 3

2.赋值表达式

[s14516@gdufs]$a=`expr 4 \* 3`
[s14516@gdufs]$echo $a
12

expr只支持整型运算
3.浮点型运算

[s14516@gdufs]$echo  4 \* 3.2 | bc

4.while循环

#!/bin/bash
read -p 'please input' n
i=1
while [ $i -le $n ]
do
echo $i
i=`expr $i + 1`
done

5.求和

#!/bin/bash
read -p 'please input: ' n
i=1
sum=0
while [ $i -le $n ]
do
sum=`expr $sum + $i`
i=`expr $i + 1`
done
echo $sum

shell函数

1.无参数函数

#!bin/bash

greet(){
echo 'hello'
}

greet

2.有参数函数

#!/bin/bash
greet(){
echo "hello, $1"
## $1 表示第一个参数,不需要在方法上写参数
}
read -p 'please input: ' name1 name2
greet $name1
greet $name2