Shell作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
常常作为批处理命令来使用,用来提高生产效率!
下面是Shell的一段简单入门程序,我们在Linux上面使用vi test.sh
然后将下面的代码打进去,运行sh test.sh
即可
#!/bin/bash
echo "Hello World !"
上面这段程序是输出HelloWorld,其中#!/bin/bash
指定编译器,必须在脚本的第一行,echo
输出信息,这里为输出Hello World
如何运行这段程序呢, 第一步首先进入到该脚本所在的目录,比如cd /root/shelltest ,运行命令sh test.sh
这样就可以进行输入了。
全局变量一直存在,不会因为切换shell终端或者退出登录而消失,全局变量需要在 /root/.bush_profile 、/etc/bashrc、/etc/profile、/etc/profile.d文件中设置,设置的格式为export name=value
在/etc/profile中定义完成后,需要重新加载配置文件 source /etc/profile
其中在/etc/profile.d设置shell脚本可以在启动shelle客户端的时候就执行这个脚本,这个文件夹中存储的都为脚本。
创建脚本内容如下
则新打开客户端的时候则会执行这个脚本,输出对应的内容。
单引号:原样输出
双引号:如果里面有变量,会输出变量
没有引号:输出变量
可以在调用脚本的时候给脚本传递参数,脚本内使用$1 $2 ...... 接受传递的参数,当参数超过9的时候,需要用花括号括起来 ${10}
特殊的调用参数:
$0:返回Shell文件名称
$$:当前脚本的PID
$#:传递的所有参数
$@:程序中的所有参数,这是将参数传递给其他程序的最佳方式。
$! :执行的上一个命令的PID
$?:上一次指令的返回值
$_:此命令前面的最后一个参数
$* :获取所有的参数
使用sh
命令启动的脚本,则在脚本结束其内部的属性都会消失,其他的脚本不能访问其内部的属性。
使用source
命令启动脚本,则在脚本结束后其属性不会失效,同时其他的脚本也能访问到。
使用unset
可以取消变量,这个变量包括环境变量和局部变量
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似),数组下标从0开始。
定义数组
array=(value1 value2 value3)
array_name[0]=value0
读取数组
${array_name[index]}
获取数组中全部的元素
${my_array[@]}
获取数组的长度
${#my_array[*]}
如果else语句中没有执行语句,不可以写
if condition
then
command1
command2
...
commandN
fi
------------------
if condition
then
command1
command2
...
commandN
else
command
fi
------------
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
while condition
do
command
done
类似do-while循环,在最后判断条件,最少执行一次
until condition
do
command
done
case 值 in
模式1)
command1
command2
...
commandN
;;
模式2)
command1
command2
...
commandN
;;
esac
demoFun(){ // 定义
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun // 调用,如果需要传递参数直接在后面跟就好 demoFun 1 2 3
echo "-----函数执行完毕-----"
expr 2 + 2
使用方法 , 需要注意的为1.表达式和运算符之间要有空格 2. 需要用``引起来使用方法:
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b: a 不等于 b"
fi
使用方法
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi