Shell编程

Shell编程

1、简介

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求,以便运行应用程序的界面系统级程序。

用户可以使用它来启动、挂起、停止甚至是编写一些程序。它是一种解释型脚本语言,可以直接调用Linux命令。

-----------------------------
|                           |
|   ---------------------   |
|   |  ---------------  |   |
|   |  |  ---------  |  |   |
|   |  |  |  硬件  | |  |   |
|   |  |  ---------  |  |   |
|   |  |     内核    |  |   |
|   |  ---------------  |   |
|   |   Shell命令解释器  |   |
|   ---------------------   |
|        外层应用程序        |
-----------------------------

2、屏幕输出命令

echo 输出的内容(不转义特殊字符)

echo -e 输出的内容(转义字符)

\t tab制表符
\n 换行
\r 回车

3、脚本格式

脚本的第一行必须以 #!/bin/bash开头

#!/bin/bash
echo "hello shell!"

4、执行脚本

需要先给脚本赋予可执行权限

chmod u+x 脚本名

再执行脚本文件(3种方式)

./脚本文件(相对路径)

/???/???/脚本文件(绝对路径)

sh 脚本文件(当前目录)

sh 脚本文件的绝对路径或相对路径

bash 脚本文件(当前目录)

bash 脚本文件的绝对路径或相对路径

5、变量

1)系统变量

$HOME 用户目录

$PWD 当前路径

$USER 查看当前用户名

$SHELL 查看bash命令所在路径

可以通过set命令查看所有的系统变量

2)自定义变量

[1] 声明变量

变量名=变量值

[2] 声明不可修改的静态变量

readonly 变量名=变量值

[3] 撤销变量

unset 变量名

[4] 使用变量

$变量名

[5] 提升为全局变量,供其他shell使用

export 变量名

[6] 注意事项
  • 变量名一般由字母、数字和下划线组成,但不能以数字开头
  • =左右不能有空格
  • 变量名一般大写

3)变量的赋值

使用反引号 `表达式` (就是波浪线下面的符号,在数字1键的左边)

或者使用 $(表达式)

CURRENT_PATH=`date`
CURRENT_PATH=$(date)

4)位置参数变量

$0 表示执行shell的命令(会把sh 或 bash命令去掉)

$n 第n个参数(可以为1-9,如果是10及以上,则需要用大括号引起来)

$* 表示所有参数,并把它们当作一个整体

$@ 表示所有参数,但它们是互相独立的

$# 表示参数的个数

示例:

#!/bin/bash
echo "$0"

echo "$1"
echo "$2"

echo "$*"
echo "$@"

echo "$#"

执行:

./test.sh a 1

./test.sh
a
1
a 1
a 1
2

5)预定义变量

$$ 执行当前命令的PID

$! 最近后台执行的PID

#!/bin/bash
echo "$$"

#表示后台执行hello脚本
./hello.sh &

echo "$!"

6)字符串的拼接

直接将字符串无空格地连接即可

示例:

#!/bin/bash
a="abc"
b="123"
echo $a$b"汉字" #abc123汉字

7)将命令执行结果赋值给变量

使用变量名=`命令`即可,如果需要多个命令,则在每个命令结束时,加上分号即可

示例:

#!/bin/bash
result=`date; pwd`
echo $result

6、运算符

使用$[算数表达式] 或 $((算数表达式))

示例:

#!/bin/bash
A=$[ ((1 + 2) * 3 / 4) % 2 ]
echo $A

执行结果为:0

7、条件判断

使用[ 判断语句 ]

注意两端的空格

常用判断条件:

字符串1 = 字符串2 字符串是否相等

数值1 -eq 数值2 数值是否相等

数值1 -ne 数值2 数值是否不等

数值1 -lt 数值2 数值1是否小于数值2

数值1 -le 数值2 数值1是否小于等于数值2

数值1 -gt 数值2 数值1是否大于数值2

数值1 -ge 数值2 数值1是否大于等于数值2

-r 文件名 文件是否可读

-w 文件名 文件是否可写

-x 文件名 文件是否执行

-f 文件名 文件是否存在,并且是一个常规文件

-e 文件名 文件是否存在

-d 目录名 目录是否存在

8、流程控制

1)if判断

if [ 判断语句 ]

then

 执行

fi

if [ 判断语句 ]

then

 执行1

else

​ 执行2

fi

if [ 判断语句 ]

then

 执行1

elif [ 判断语句 ]

then

 执行2

else

​ 执行3

fi

示例:

#!/bin/bash
if [ $1 -gt 10 ]
then
    echo "大于10"
elif [ $1 -ge 5 ]
then
    echo "大于等于5"
fi

执行:

./test.sh 100
大于10

2)case判断

case 变量 in

 “值1”)

  执行1

 ;;

 “值2”)

  执行2

 ;;

 *)

  执行默认

 ;;

esac

示例:

#!/bin/bash
case $1 in
    "1")
        echo "一"
    ;;
    "2")
        echo "二"
    ;;
    *)
        echo "其它"
    ;;
esac

执行:

./test.sh 7
其它

3)for循环

for 变量名 in 值1 值2 … 值n

do

 执行

done

for (( 初始值; 循环控制条件; 更新初始值 ))

do

 执行

done

示例:

#!/bin/bash
for i in $*
do
    echo $i
done

echo "---------"

for j in $@
do
    echo $j
done

echo "---------"

sum=0
for (( k=1; k<=10; k++ ))
do
    sum=$[ $sum + $k ]
done
echo $sum

执行:

./test.sh 1 2 3

1 2 3
---------
1
2
3
---------
55

4)while循环

while [ 判断语句 ]

do

 执行

done

示例:

#!/bin/bash
i=1
sum=0
while [ $i -le 10 ]
do
    sum=$[ $i + $sum ]
    i=$[ $i + 1 ]
done
echo $sum

执行:

./test.sh
55

8、读取控制台输入命令

read 选项 保存输入值的变量名

-t 指定读取输入值的等待时长(单位秒,超时则退出等待)

-p 提示信息

9、路径命令

1)返回路径

dirname 文件路径

示例:

dirname /root/test.sh
/root

2)返回文件名

basename 文件路径

示例:

basename /root/test.sh
test.sh

10、函数

函数声明:

function 函数名()

{

 函数体

 return 返回值

}

函数执行:

函数名 参数1 参数2 … 参数n

获取返回值:

$?

注意:

  • 函数声明的顺序需要早于函数执行
  • return函数返回语句可以不写
  • 函数返回值只能是整数,如果函数没有写返回语句,则获取到的函数返回值是0

示例:

#!/bin/bash
function calc()
{
    local sum=0
    sum=$[ $1 + $2 ]
    return $sum
}

read -p "input a number:" n1
read -p "input another number:" n2

calc $n1 $n2
echo "result:"$?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值