Bash

1987年布莱恩·福克斯编写命令处理器。

维基百科:BashUnix shell的一种,在1987年由布莱恩·福克斯为了GNU计划而编写。1989年发布第一个正式版本,原先是计划用在GNU操作系统上,但能运行于大多数类Unix系统的操作系统之上,包括LinuxMac OS X v10.4都将它作为默认shell。

系统目录常用命令:

rm -rf  删除目录
rm -f   删除文件
pwd   查看当前目录
cd /  进入根目录
cd .. 返回上一级目录
cd ~  切换到当前目录的家目录
cd ~/chenwei 切换到用户chenwei的家目录
cd - 将当前目录切换到上一个工作目录

初始化安装脚本:

curl https://feeday.github.io/sh/feeday.sh -O  #下载脚本
bash puck.sh  #执行脚本

yum install wget   #安装软件
wget https://feeday.github.io/sh/feeday.sh #下载脚本
bash puck.sh  #执行脚本

脚本输入两个数输出并让两个数相加求和:

#!/bin/bash
#输入输出求和 输入两个数并让两个数相加
NumAdd(){
    echo "输入两个数并让两个数相加"
    echo -n "输入第一个数字: "         #参数-n的作用是不换行,echo默认是换行
    read  a
    read -p "输入第二个数字: " b       #-p参数,允许在read命令行中直接指定一个提示
    echo "两个数字分别为 $a 和 $b "
    return $(($a+$b))
}
NumAdd
echo "输入的两个数字之和为 $? "

shell中脚本参数传递的两种方式

方式一:$0,$1,$2..

采用$0,$1,$2..等方式获取脚本命令行传入的参数,值得注意的是,$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用${10},${11}….才能获取到参数,但是一般很少会超过10个参数的情况。

1.1 示例:新建一个test.sh的文件

#!/bin/bash
echo "脚本$0"
echo "第一个参数$1"
echo "第二个参数$2"

 

在shell中执行脚本,结果如下

$ ./test.sh 1 2

#shell中将会输出:
脚本./test.sh
第一个参数1
第二个参数2
1.2 下面是参数超过10个的情况,在test.sh文件写入

#!/bin/bash
echo "脚本名$0"
echo "第一个参数$1"
echo "第二个参数$2"
echo "第三个参数$3"
echo "第四个参数$4"
……
echo "第十个参数$10"
echo "第十个参数${10}"

 

在shell中执行脚本,结果如下

$ ./test.sh a b c d e f g h i j

#shell中将会输出:
脚本名./test.sh
第一个参数a
第二个参数b
第三个参数c
第四个参数d
第五个参数e
第六个参数f
第七个参数g
第八个参数h
第九个参数i
第十个参数a0
第十个参数j
可以看到${10}正确读取到了第十个参数,而$10被分成$1读取到第一个参数a然后拼接字符串0,于是输出a0。

优点:获取参数更容易,执行脚本时需要的输入少

缺点:必须按照顺序输入参数,如果中间漏写则参数对应就会错误

方式二:getopts

语法格式:getopts [option[:]] [DESCPRITION] VARIABLE
option:表示为某个脚本可以使用的选项
“:”:如果某个选项(option)后面出现了冒号(”:”),则表示这个选项后面可以接参数(即一段描述信息DESCPRITION)
VARIABLE:表示将某个选项保存在变量VARIABLE中

2.1 示例:同样新建一个test.sh文件

while getopts ":a:b:c:" opt
do
case $opt in
a)
echo "参数a的值$OPTARG"
;;
b)
echo "参数b的值$OPTARG"
;;
c)
echo "参数c的值$OPTARG"
;;
?)
echo "未知参数"
exit 1;;
esac
done

 

用一个while循环加case分支获取不同参数,:a:b:c相当于定义参数的变量名,有时候可能会有未知参数,所以增加一个?的分支。

在shell中执行脚本,结果如下

$ ./test.sh -a 1 -b 2 -c 3

#在shell中的输出
参数a的值1
参数b的值2
参数c的值3
$ ./test.sh -a 1 -c 3

#在shell中的输出
参数a的值1
参数c的值3
$ ./test.sh -a 1 -c 3 -d 4

#在shell中的输出
参数a的值1
参数c的值3
未知参数
优点:由于使用了-a加参数值的方式进行一一匹配,所以不会参数匹配错误,同时也可以缺省参数,并不会导致参数错误,同时也便于后期参数的扩展和移植

缺点:脚本执行时参数需要的输入会增多
————————————————
版权声明:本文为CSDN博主「随风丶逆风」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sinat_36521655/article/details/79296181