shell基础编程
shell基础编程
1创建:
使用 vim 命令创建以.sh结尾的 脚本文件
#!/bin/bash——第一行写上
2执行:
-
要给脚本可执行权限
-
直接在命令行输入shell脚本路径(包括后缀)
注意:如不给可执行权限,也可执行,就要在脚本前使用命令sh执行
以后台的方式运行:可在一个脚本中执行另一个shell脚本
如在yourshell.sh中写入:
./myshell.sh &&
3变量
系统变量
如HOME PATH USER等
set指令可用查看全部
-
定义变量:变量=值
-
撤销变量:unset 变量
引用变量:$变量
输出:echo “内容”
-
静态变量定义:readonly 变量=值
-
静态变量不能 unset
4定义变量的规则
- 变量名不能以数字开头
- 等号两侧不能有空格
- 变量名一般习惯大写
5将命令的返回值赋给变量
A=`ls -la /home` 反引号,运行里面的命令,并把结果返回A
A=$(ls -la /home)等价反引号
6设置环境变量
在/etc/profile文件定义环境变量
export 变量名=变量值——将shell变量设置为环境变量
需要使用source /ect/profile使环境变量生效
7位置参数变量
如:./myshell.sh 100 200——在shell脚本内部可以获取到这两个参数
$n——$0代表参数本身,$1-$9代表1至9个参数,10以上的参数要用{}包,如${10}
$*——代表命令行中的所有参数,把所有参数当成一个整体
$@——代表命令行中的所有参数,不过把每个参数分别对待
$#——命令行中的参数个数
8预定义变量
shell设计者事先定义好的变量,可直接在shell中使用
$$——当前进程的进程号
$!——后台运行的最后一个进程的进程号
$?——最后一次执行命令的返回状态(0即执行正确,非0则执行不正确,具体为哪个值由命令决定)
9运算符
基本语法
1. $((运算式)) 或 $[运算式]
2. expr m + n——注意,运算符之间要有空格,为一命令,需要用反引号括起来``
3. expr m - n
4. \*,/,%——乘号需要反斜杠
10条件判断
基本语法:
[ condition ]——注意:condition前后要有空格
非空则返回true,可以使用$?验证(返回0为true)
#判断字符串是否相等
if [ "ok" = "ok" ]
then
echo "equal"
fi
#判断数字大小
if [ 23 -gt 22 ]
then
echo "大于"
fi
#判断文件时=是否存在
if [ -e /root/shell/a.txt ]
then
echo "存在"
fi
11流程控制
- if判断
if [ condition ];then
程序
fi
或者
if [condition]
then
程序
elif [ condition ]
then
程序
fi
推荐使用第二种
- case
case $变量名 in
"值1")
如果变量等于值1,则执行程序1
;;
"值2")
如果变量等于值2,则执行程序2
;;
···省略其他分支···
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
- for循环
基本语法1
#这里可以看出$*和$@的区别
for 变量 in 值1 值2 值3···
do
程序
done
基本语法2
for((初始值;循环控制变量;变量变化))
do
程序
done
- while循环
基本语法1
while [ condition ]
do
程序
done
12获取控制台输入
read (选项) (参数)
选项:
-p——指定读取值时的提示符
-t——指定读取值时的等待时间,超时输入将不等待
13系统函数(部分)
- basename——返回完整路径的最后/后面的部分,常用于获取文件名
basename /home/aaa/a.txt //输出a.txt
basename /home/aaa/a.txt .txt //输出a
- dirname——获得除去/及后面的部分的前面的路径
dirname /home/aaa/a.txt //输出/home/aaa
14自定义函数
基本语法([]中的可不写)
[function] funname[()]{
Action;
[return int;]
}
调用直接写函数名 function[值]
#一个函数
function getSum(){
SUM=$[$n1+$n2];
echo "和是=$SUM"
}
#从键盘缓存读入
read -p 请输入第一个数 n1
read -p 请输入第一个数 n2
#调用
getSum $n1 $n2