linux 脚本编译,shell脚本编写

shell脚本格式

#! /bin/bash

# author :jack

# date: 2020-5-20

# for study

.........

文件首行指定执行shell的程序以及相关说明

shell 脚本文件后缀,建议命名为.sh

脚本执行失败时,使用exit返回非零值,来退出程序

默认缩进4个空格

shell脚本的命名简单,有意义

注释

单行注释

#

多行注释

:<

这是注释

案例

vim userinfo.sh

#! /bin/bash

# author :jack

# date: 2020-5-20

# for study

echo "$(cat /etc/passwd)"

退出vim esc :x

执行脚本

bash userinfo.sh

sh userinfo.sh

./userinfo.sh (没有权限的情况下,chmod +x userinfo.sh) #./之间没有空格

函数

格式

function 函数名()

{

命令1

命令2

命令3

.....

}

function关键字可省略,如果省略function,()不能省

没有参数的情况下,也可以省略括号

function hello {

echo "hello,Jack"

}

hello #调用函数

调用函数,直接函数名

案例1:

greet(){

echo "hello ${LOGNAME}, today is $(date)"

echo "hello ${LOGNAME}, \n today is $(date)"

echo -e "hello ${LOGNAME}, \n today is $(date)"

}

greet # 调用函数

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

hello root, today is 2020年 05月 31日 星期日 00:08:04 CST

hello root, \n today is 2020年 05月 31日 星期日 00:08:04 CST

hello root,

today is 2020年 05月 31日 星期日 00:08:04 CST

${}引用变量

$()引用命令结果

echo加-e 才转义\n

案例2

read -p "请输入你的姓名: " name #$ REPLY

read -p "请输入你的年龄:" age

function info() {

echo -e "你的姓名:${name} \n 你的年龄:${age}"

}

info

read 读取用户输入,赋值给name,如果不用name接收,默认赋值给 REPLY

案例3

function info {

echo -e "你的姓名:$1 \n 你的年龄:$2"

}

info "土豆" 18

函数内部的$1,$2接收函数调用时候的实参

案例4

read -p "请输入你的姓名: " name

read -p "请输入你的年龄:" age

#

function info() {

echo -e "你的姓名:$1 \n 你的年龄:$2"

}

info "${name} " "${age}"

shell中参数名不能自定义,

math?formula=1%2C2

shell函数不需要写形参

传参过程

f8ac448c4648

image.png

案例5

function info() {

echo -e "你的姓名:$1 \n 你的年龄:$2"

}

info $1 $2

函数调用时的$1,$2,是命令行传入的值,与函数内部的$1,$2 不一样

流程控制

if

if [ 条件1 ]

then

指令

elif [ 条件2 ]

then

指令2

else

指令3

fi

read -p "请输入你的年龄"

if [ ${REPLY} -gt 70 ];then echo "回家锻炼身体吧"

elif [ ${REPLY} -gt 18 ]; then echo "热烈欢迎"

else echo "回家写作业"

fi

for

格式1:

for 值 in 列表

do

执行语句

done

格式2:

max=10

for ((i=1;i<=max;i++))

do

echo "${i}"

done

案例

for i in $(ls /) ; do

echo "dir:${i}"

done

dir=$(ls /)

index=1

for i in ${dir}

do

echo "第${index}个文件:${i}"

index=$((index+1))

done

n=10

for (( i = 0; i < n; i++ )); do

echo ${i}

done

while

只要满足条件就会一直执行

while [ 条件 ]

do

执行语句

done

案例

read -p "输入数字" a

while [ "${a}" -lt 20 ]

do

echo "${a}"

a=$((a+1))

done

until

只要条件不满足,就一直循环

until 条件

do

执行语句

done

case

case 值 in

模式1)

command1

command2

...

commandN

;;

模式2)

command1

command2

...

commandN

;;

esac

if [ ! "$#" -eq 3 ]; then

echo -e "Usge: \n $0 num1 +|-|*|/ num2"

exit 1 # 异常退出程序

fi

case $2 in

+)

echo "$1+$3 = $(($1+$3))"

;;

-)

echo "$1-$3 = $(($1-$3))"

;;

\*)

echo "$1*$3 = $(($1*$3))"

;;

/)

echo "$1/$3 = $(($1/$3))"

;;

*)

echo "不支持的运算符"

;;

esac

exit 0

echo '输入 1 到 4 之间的数字:'

echo '你输入的数字为:'

read aNum

case $aNum in

1) echo '你选择了 1'

;;

2) echo '你选择了 2'

;;

3) echo '你选择了 3'

;;

4) echo '你选择了 4'

;;

*) echo '你没有输入 1 到 4 之间的数字'

;;

esac

bash -x 脚本.sh 调试脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值