文章目录
介绍:
shell:简单、易用、高效,是一个内置的脚本,不需下载
什么是脚本:一条一条命令的堆积
shell 是一个程序,一般都是放在/bin或者/user/bin目录下,当前 Linux 系统可用的 Shell 都记录在/etc/shells文件中。/etc/shells是一个纯文本文件,你可以在图形界面下打开它,也可以使用 cat 命令查看它。
在现代的 Linux 上,sh 已经被 bash( Bourne Again Shell) 代替,/bin/sh往往是指向/bin/bash的符号链接。 所谓的符号链接就是软连接。
一、shell脚本
(1)新建shell脚本:
vim test.sh
test.sh内容
#!/bin/bash
echo "Hello World !"
test.sh,扩展名为 sh(sh代表shell)
(2)执行shell脚本
./test.sh #执行脚本
(3)Shell 注释
以 #
开头的行就是注释,会被解释器忽略。
# 这是一个注释
多行注释
:<<'
注释内容
注释内容
注释内容
'
# 或
:<<!
注释内容
注释内容
注释内容
!
二、shell变量
(1)定义变量时,变量名不加美元符号($,PHP语言中变量需要)
,如:
str = "shell"
变量名的命名须遵循如下规则:
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)。
(2)使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可
,如:
your_name="qinjx"
echo $your_name
echo ${your_name}
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界
,比如下面这种情况:
for skill in Ada Coffe Action Java; do
echo "I am good at ${skill}Script"
done
(3)删除变量
使用 unset 命令可以删除变量。
语法:
unset variable_name
变量被删除后不能再次使用。unset 命令不能删除只读变量 readonly myUrl (myUrl就是一个只读变量)
。
(4)字符串
字符串是shell编程中最常用最有用的数据类型字符串可以用单引号,也可以用双引号
。
三、向shell脚本传递参数
这里向test.sh脚本传递了三个参数,分别是 1 2 3
$ ./test.sh 1 2 3
四、shell 数组
Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小
。
my_array=(A B C D)
五、shell运算符
六、Shell echo命令
Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:
echo "It is a test"
Shell printf 命令和echo命令类似,都是文本输出
。
七、Shell test 命令
Shell中的 test 命令用于检查某个条件是否成立
,它可以进行数值、字符和文件三个方面的测试。
八、Shell 流程控制
(1)if else
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
(2)for 循环
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
(3)while 语句
#!/bin/bash
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
(4)until 循环
until 循环执行一系列命令直至条件为 true 时停止
。
#!/bin/bash
a=0
until [ ! $a -lt 10 ] #lt表示小于,当a不小于10时为true
do
echo $a #输出0~9
a=`expr $a + 1`
done
数值运算符:
-eq //等于
-ne //不等于
-gt //大于 (greater )
-lt //小于 (less)
-ge //大于等于
-le //小于等于
(5)case
Shell case语句为多选择语句,case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构
。
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
(6)跳出循环
在循环过程中,有时候需要在未达到循环结束条件时强制跳出循环,Shell使用两个命令来实现该功能:break和continue
。
九、Shell 函数
#!/bin/bash
funWithReturn(){
echo "这个函数会对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
funWithReturn # 调用函数
echo "输入的两个数字之和为 $? !"
函数参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…
带参数的函数示例:
#!/bin/bash
funWithParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73 # 向函数中传递参数
十、Shell文件包含
和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。
在test2.sh中引用test1.sh文件:
#使用 . 号来引用test1.sh 文件
. ./test1.sh