Loading... **1987年[布莱恩·福克斯](https://zh.wikipedia.org/wiki/%E5%B8%83%E8%90%8A%E6%81%A9%C2%B7%E7%A6%8F%E5%85%8B%E6%96%AF "布莱恩·福克斯")编写命令处理器。** > **[维基百科](https://zh.wikipedia.org/wiki/Bash):Bash**,[Unix shell](https://zh.wikipedia.org/wiki/Unix_shell "Unix shell")的一种,在1987年由[布莱恩·福克斯](https://zh.wikipedia.org/wiki/%E5%B8%83%E8%90%8A%E6%81%A9%C2%B7%E7%A6%8F%E5%85%8B%E6%96%AF "布莱恩·福克斯")为了[GNU计划](https://zh.wikipedia.org/wiki/GNU%E8%A8%88%E5%8A%83 "GNU计划")而编写。1989年发布第一个正式版本,原先是计划用在[GNU](https://zh.wikipedia.org/wiki/GNU "GNU")操作系统上,但能运行于大多数[类Unix系统](https://zh.wikipedia.org/wiki/%E7%B1%BBUnix%E7%B3%BB%E7%BB%9F "类Unix系统")的操作系统之上,包括[Linux](https://zh.wikipedia.org/wiki/Linux "Linux")与[Mac OS X v10.4](https://zh.wikipedia.org/wiki/Mac_OS_X_v10.4 "Mac OS X v10.4")都将它作为默认shell。 * [Bash 在线工具](https://c.runoob.com/compile/18) * [Linux 命令大全](http://man.linuxde.net/) * [在线运行 Linux 模拟器](https://bellard.org/jslinux/) **系统目录常用命令:** ``` rm -rf 删除目录 rm -f 删除文件 pwd 查看当前目录 cd / 进入根目录 cd .. 返回上一级目录 cd ~ 切换到当前目录的家目录 cd ~/chenwei 切换到用户chenwei的家目录 cd - 将当前目录切换到上一个工作目录Copy ``` **初始化安装脚本:** ``` 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 #执行脚本Copy ``` **脚本输入两个数输出并让两个数相加求和:** ``` #!/bin/bash #输入输出求和 输入两个数并让两个数相加 NumAdd(){ echo "输入两个数并让两个数相加" echo -n "输入第一个数字: " #参数-n的作用是不换行,echo默认是换行 read a read -p "输入第二个数字: " b #-p参数,允许在read命令行中直接指定一个提示 echo "两个数字分别为 $a 和 $b " return $(($a+$b)) } NumAdd echo "输入的两个数字之和为 $? "Copy ``` --- [**shell中脚本参数传递的两种方式**](https://blog.csdn.net/sinat_36521655/article/details/79296181) 方式一:\$0,\$1,\$2.. 采用\$0,\$1,\$2..等方式获取脚本命令行传入的参数,值得注意的是,\$0获取到的是脚本路径以及脚本名,后面按顺序获取参数,当参数超过10个时(包括10个),需要使用\${10},\${11}….才能获取到参数,但是一般很少会超过10个参数的情况。 1.1 示例:新建一个test.sh的文件 ``` #!/bin/bash echo "脚本$0" echo "第一个参数$1" echo "第二个参数$2"Copy ``` 在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}"Copy ``` 在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 doneCopy ``` 用一个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 最后修改:2024 年 10 月 07 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏