15.shell编程

Linux的shell编程可以理解为Windows里面的powershell和cmd

新建文件与执行

在root文件夹新建shell文件后写入命令

cd /root
vi test.sh   # shell文件后缀为.sh

添加执行权限后运行该文件

chmod +x test.sh
# 三种方法都可以运行
bash test.sh
./test.sh
/root/test.sh

shell文件标准开头:#!/bin/bash

运行输出ifconfig结果后输出haha

#!/bin/bash
ifconfig
echo 'haha'

此时haha不会输出

#!/bin/bash
ifconfig
exit 1 
echo 'haha'

如果结束时候写exit 1,那么这个.sh文件执行完之后,echo $? 就会输出1,数字最高到255,其他的都输出0

使用/修改变量

#!/bin/bash
$your_name="xiaoming"
echo $your_name

$your_name="xiaohong"
echo ${your_name}   # 都可以输出变量

Linux中变量赋值操作会把空格当作命令执行

设置只读变量

$your_name="xiaoming"
readonly your_name  
$your_name="xiaohong"

执行会报错,原变量未被修改

删除变量

$your_name="xiaoming"
unset your_name
echo $your_name

不存在变量输出为空

参数

$1 $2 $3   # 对应调用第1、2、3个参数
$0         # 命令本身
$*         # 传递给脚本的所有参数(把所有参数当作整体)
$@         # 传递给脚本的所有参数
$#         # 传递给脚本参数的个数

image

$*和$@虽然结果一样,但是前者是一个整体,整个是一个字符串

条件和运算符

#!/bin/bash

num1=100
num2=200

if test $[num1] -eq $[num2]
then
 echo 'dengyu'
else
 echo 'budengyu'
fi

数值测试:
-gt >
-ge >=
-eq =
-ne !=
-lt <
-le <=

参数交互

运行后输入参数

#!/bin/bash

read -p 'shu ru num1&num2:' num1 num2
if [ $num1 -gt $num2 ];then   
 echo 'num1>num2'
elif [ $num1 -lt $num2 ];then
 echo 'num1<num2'
else
 echo 'num1=num2'
fi

image

运行前带入参数

#!/bin/bash

if [ $1 -gt $2 ];then
 echo 'dayu'
elif [ $1 -lt $2 ];then
 echo 'xiaoyu'
else
 echo 'dengyu'
fi

image

用户传入的参数在[]前后要有空格

用户创建

#!/bin/bash

if [ $# -lt 1 ];then   # 必须带参数
 echo '必须一个以上参数'
 exit 1  # $?=1
fi
if id $1 &>/dev/null;then  # &>将输出重定向到回收站
 echo '$1 exist'
 exit 0
else
 useradd $1
 [ $? -eq 0 ] && echo "$1" | passwd --stdin $1 &>/dev/null  # 如果用户输入正确,将用户的键盘输入(用户名)当作密码保存并不输出
fi

命令:./test.sh xiaoming ,如果xiaoming不存在,就会创建一个用户名和密码都是xiaoming的账户

命令执行正确$?=0,执行失败$?=1

函数

直接调用

#!/bin/bash

function fun1(){
 echo 'haha'
}

fun1  # 调用函数

有返回值(计算后直接输出)

#!/bin/bash

function fun1(){
 echo 'input num1:'
 read num1
 echo 'input num2:'
 read num2
 res=$[$num1+$num2]  
 echo $res
}

fun1

有返回值(计算后通过其他函数输出)

#!/bin/bash

function sum(){
 b=0
 b=$[$1+$2]
 return $b
}

read -p "Please input num1:" num1;
read -p "Please input num2:" num2;

function sum1(){
 sum $num1 $num2
 a=$?
 echo $a
}

sum1

return只能返回0-255之间的整数,超过255重新计数;return出来的只能使用$?才能看到,输出最好还是用echo

通过循环进行正常return

#!/bin/bash

sum=0   # 全局变量

function getsum(){
 for ((i=$1; i<=$2; i++)); do
  ((sum+=i))   # 从$1累加到$2
 done
 return $?
}

read num1
read num2

if getsum $num1 $num2; then
 echo "Final sum is: $sum"
else 
 echo "Error"
fi

函数内进行return可以出现任意值

image

调试脚本

-x   在执行的时候显示参数和命令
+x   禁止调试
-v   在命令读取时显示输入
+v   禁止打印输入
-n   检测脚本中语法错误

命令:bash -[参数] [脚本名]

posted @ 2022-09-01 10:43  icui4cu  阅读(33)  评论(0编辑  收藏  举报