基本概念
shell
在计算机科学中,Shell是指"为使用者提供操作界面"的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。
shell 脚本
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
Shell种类
操作系统内核(kernel)与shell是独立的套件,而且都可被替换。不同的操作系统使用不同的shell;同一个kernel之上可以使用不同的shell。
常见的shell分为两大主流:
sh:
Bourne shell(sh) ,Solaris,hpux默认shell
Bourne again shell(bash) ,Linux系统默认shell
csh:
C shell(csh)
tc shell(tcsh)
Shell 环境
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
【1】Shell程序步骤
1、创建一个文件,扩展名为.sh。
2、修改文件的权限为可执行文件
3、执行
【2】Shell结构
1、#! 用来指定执行脚本的shell
2、# 注释
3、 命令和控制结构
【3】Shell变量
命名规则:
1、命名只能使用英文字母,数字和下划线,首
个字符不能以数字开头。
2、中间不能有空格,可以使用下划线(_)。
3、不能使用标点符号。
4、不能使用bash里的关键字(可用help命令查看
shell基本语法
变量
变量的定义
shell脚本中,并不区分变量类型,定义一个变量和python语法一样:
# 不支持数字开头,不能用标点符号,不能用关键字
变量的使用
使用一个定义过的变量,需要在变量名前加上$。
当一个变量两个有{},是为了帮助解释器识别变量的边界
当我们需要对变量加上一个前缀,此时花括号的作用表明标识符i为一个变量;(如果不加大括号,解释器会将inum识别为一个变量。)
Shell脚本的权限
一般情况下,默认创建的脚本是没有执行权限的。
没有权限不能执行,需要赋予可执行权限。
变量类型:
运行shell时,会同时存在三种变量:
1. 局部变量 ( 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。)
2. 环境变量 (所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。)
3.shell变量 (shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行)
Shell脚本的执行
1,输入脚本的绝对路径或相对路径
/root/Helloworld.sh
./Helloworld.sh
2,bash或sh +脚本
bash /root/Helloworld.sh
sh Helloworld.sh
注:当脚本没有x权限时,root和文件所有者通过该方式可以正常执行。
3,在脚本的路径前再加". " 或source
source /root/Helloworld.sh
. ./Helloworld.sh
数组
定义、读取数组元素
bash shell只支持一位数组,初始化时不需要定义数组大小,语法如下:
arr =(v0 v1 ... vn)
使用下标定义数组元素:
arr[0]=v0
arr[1]=v1
读取数组元素同样要用到$符号:
${arr[i]}
获取数组中所有元素
有以下两种方式:
${arr[*]}
${arr[@]}
获取数组长度
有如下两种方式:
${#arr[*]}
${#arr[@]}
条件控制
条件表达式
[ expression ] 括号两端必须要有空格
[[ expression ]] 括号两端必须要有空格
test expression
组合测试条件:
-a:and
-o:or
!:not
if [ $a == $b ]
then
echo "a = b"
elif [ $a -gt $b ]
then
echo "a > b"
elif [ $a -lt $b ]
then
echo "a < b"
fi
# if条件句结束标识fi
循环
for
列表循环
for i in 1 2 3 4 5
do
...
done
# 或者
for i in {1..5}
do
...
done
seq语句
seq 1000 起始默认是 1,间隔默认是1
seq 2 1000 间隔默认是1
seq 1 3 10 从1到10,间隔为3,结果是:1 4 7 10
for in i `seq 1 5`
do
...
done
类C语法
for ((i = 1; i <= 5; i++))
do
...
done
while
# 方法1
i=1
while(( $i<=5 ))
do
...
done
# 方法2
i=1
while [ $i -le 5 ]
do
...
done
无限循环
while :
while true
for(( ; ; ))
原文:https://www.cnblogs.com/ljxdlpsiu/p/11876869.html