shell脚本的第一行
一般shell脚本的第一行用于在没有指定解释器时,默认使用这个解释器执行
如,默认使用Bash解释器来执行这个脚本
#!/bin/bash
如果安装了python3,想写一个py文件并执行:
这里的第一行就写python3命令的所在目录,并给他加上可执行权限,这与指定了解释器执行是一样的
变量
shell变量使用需要在变量前面加一个$符号
位置变量: $1-$9 分别代表参数列表中的第1-9个参数
预定义变量 : 系统预留的一些变量
$0:当前进程或者脚本名称
$!:后台运行的最后一个进程的pid号
$?:上一条命令程序返回值
$*:代表所有参数内容
$$:表示当前进程的pid号
$#:表示参数个数
$@:代表所有参数(逐个获取)
使用双引号可以解析变量,使用单引号会原样输出
数据类型
shell中默认的数据类型是字符串
Linux下的计算器 – bc
bc进行数值大小的判断结果:判断结果为真就返回1,结果为假就返回0
整数数值的运算
三种表示方法:
- $(( 表达式 ))
- $[ 表达式 ]
- expr 表达式
注意空格!
表示1到9:
- {1…9}
-
- for i in {1…9}
- seq
-
- for i in `seq9`
-
- 输出0到10的偶数
seq 0 2 10
- 输出0到10的偶数
-
- 等宽位输出,高位用0补齐
seq -w 0 2 10
- 等宽位输出,高位用0补齐
获得命令的输出结果
``或$()
字符串操作
[root@localhost shell_script]# line=`head -n1 /etc/passwd`
[root@localhost shell_script]# echo $line
root:x:0:0:root:/root:/bin/bash
字符串长度
[root@localhost shell_script]# echo ${#line}
31
截取前4个字符
[root@localhost shell_script]# echo ${line:0:4}
root
截取后9个字符
[root@localhost shell_script]# echo ${line:0-9}
/bin/bash
从倒数第九个字符开始截取4个字符
[root@localhost shell_script]# echo ${line:0-9:4}
/bin
从左向右截取最后一个:后的字符
[root@localhost shell_script]# echo ${line##*:}
/bin/bash
从左向右截取第一个:后的字符
[root@localhost shell_script]# echo ${line#*:}
x:0:0:root:/root:/bin/bash
从右向左截取最后一个:后的字符
[root@localhost shell_script]# echo ${line%%:*}
root
从右向左截取第一个:后的字符
[root@localhost shell_script]# echo ${line%:*}
root:x:0:0:root:/root
数组
定义: 使用圆括号,之间以空格分隔
[root@localhost shell_script]# a=(1 2 3 4 5)
输出数组所有元素
[root@localhost shell_script]# echo ${a[@]}
1 2 3 4 5
按下标输出
[root@localhost shell_script]# echo ${a[1]}
2
数组长度
[root@localhost shell_script]# echo ${#a[*]}
5
截取
[root@localhost shell_script]# echo ${a[*]:1:2}
2 3
删除元素,但其他元素的下标不会变
[root@localhost shell_script]# unset a[2]
[root@localhost shell_script]# echo ${a[@]}
1 2 4 5
[root@localhost shell_script]# echo ${a[2]}
[root@localhost shell_script]# echo ${a[3]}
4
for循环中一次取出数组的元素:for i in ${a[@]}
循环
for
第一种方式:
for 变量 in 值1 值2
do
循环语句
done
第二种方式:
for ((初始化变量;结束循环的条件;运算))
do
循环执行的语句
done
while
while 条件
do
执行循环语句
done
也支持break,continue
判断
[]、[[]]、(())都可以用于判断
(())整数值的判断
[]判断字符串的过程中,如果有空白字符,他会进行分词
[[]]不会进行分词,建议使用[[]]进行判断
[ ]表示条件测试。注意这里的空格很重要。要注意在’[‘后面和’]'前面都必须要有空格。
语法:
if [ command ];then
符合该条件执行的语句
elif [ command ];then
符合该条件执行的语句
else
符合该条件执行的语句
fi
-
常用判断
[ -d FILE ] 如果 FILE 存在且是一个目录则返回为真。
[ -f FILE ] 如果 FILE 存在且是一个普通文件则返回为真。 -
字符串判断
[ -z STRING ] 如果STRING的长度为零则返回为真,即空是真
[ -n STRING ] 如果STRING的长度非零则返回为真,即非空是真
[ STRING1 ] 如果字符串不为空则返回为真,与-n类似
[ STRING1 == STRING2 ] 如果两个字符串相同则返回为真
[ STRING1 != STRING2 ] 如果字符串不相同则返回为真
[ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面则返回为真。
[ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”后面则返回为真。 -
数值判断
[ INT1 -eq INT2 ] INT1和INT2两数相等返回为真 ,=
[ INT1 -ne INT2 ] INT1和INT2两数不等返回为真 ,<>
[ INT1 -gt INT2 ] INT1大于INT2返回为真 ,>
[ INT1 -ge INT2 ] INT1大于等于INT2返回为真,>=
[ INT1 -lt INT2 ] INT1小于INT2返回为真 ,<
[ INT1 -le INT2 ] INT1小于等于INT2返回为真,< -
逻辑判断
[ ! EXPR ] 逻辑非,如果 EXPR 是false则返回为真。
[ EXPR1 -a EXPR2 ] 逻辑与,如果 EXPR1 and EXPR2 全真则返回为真。
[ EXPR1 -o EXPR2 ] 逻辑或,如果 EXPR1 或者 EXPR2 为真则返回为真。
[ ] || [ ] 用OR来合并两个条件
[ ] && [ ] 用AND来合并两个条件 -
类似python的逻辑短路运算
cmd1 && cmd2 如果cmd1执行成功,或者为真,则执行cmd2
cmd1 || cmd2 如果cmd1执行不成功,或者为假,则执行cmd2
cmd1 && cmd2 || cmd3 如果cmd执行成功,就执行cmd2,不成功就执行cmd3
case语句
case $变量名 in
条件1)
执行语句一
;;
条件2)
执行语句二
;;
*)
执行语句三
esac
函数
定义: 可以用function定义,也可以不使用
a() {
}
或
function a() {
}
调用: 直接用函数名调用 a
如果要接参数: a $1