shell 学习
1、解释器
#!/bin/bash #是注释符号 #! 是特殊的符号
2、赋权限
chmod 700 fliename
# 没有赋执行权限的文件不能用 ./ 执行 用户,所在组,其他
3、特殊符号解释
~: 回到home目录
! 执行历史命令 !!执行上一条命令
$ 变量中取内容符
+ - * / % 加 减 乘 除 取余
& 后台执行
* 通配符
? 匹配除回车外的一个字符
; 一行执行多条命令用这个分隔
| 管道 上一个命令的输出作为下一个命令的输入 cat filename | grep "abc"
\ 转义符
`` 命令中执行命令 echo "today is `date +%F`"
'' 单引号字符串不能解释变量 echo '$USER' 输出 $USER
"" 双引号字符串 echo "$USER" 输出 root
$_ 显示最后一个执行的命令
$N 第几个外传的参数
4、shell重定向
> 重定向输入 覆盖原数据
>> 重定向追加输入,在原数据末尾追加
< 重定向输出 wc -l < /etc/passwd
<< 重定向追加输出 fdisk /dev/sda <<EOF ...里面代码第二行顶格写,按交互顺序依次执行... EOF
5、shell数学运算
expr 整数的运算
expr 1 + 1
expr 1 \* 1 乘需要转义,不然会匹配通配符
expr 7 + 1.1 &>/dev/null ; echo $? 后台执行加法运算不管对错输出到回收站,打印是否执行成功(输出0表示成功)
echo $((1*1)) 这里乘不需转义
echo $((3**2)) 3的2次方
echo "scale=2;100/3"|bc 保留两位小数
6、常用命令
echo 命令
-n 不换行
-e 把转义的符号特殊处理,不直接输出 例如 echo -e "\t helloworld"
read 命令
默认接受键盘的输入,回车符代表输入结束
例子:read -s -t5 -n7 -p "password: " xxx 后面可用$xxx获取
-p 打印信息
-t 限定时间
-s 不回显
-n 输入的字符个数
7、shell中的数组
1.定义 数组名称=(元素1 元素2 元素3 ...)
2.读取
echo ${数组名称[索引]} 某一个元素
echo ${数组名称[@]} 所有元素
echo ${#数组名称[@]} 元素个数
echo ${数组名称[@]:1} 从索引1开始打印
echo ${数组名称[@]:1:2} 从索引1开始共打印2个元素
声明一个关联数组
declare -A 数组名称
数组名称[名称]=值
8、流程控制语句
if判断语法
(continue、break 效果不变)
if [ condition ]
then
...
elif [ condition ]
...
else
...
fi
for循环
for i in r1 r2 r3
do
...
done
for ((i=1;i<10;i++))
do
...
done
case语法
case $VALUE in
1|2)
echo xxx
;;
3|4)
echo yyy
;;
*)
echo zzz
;;
esac
9、运算符与比较
比较运算符
-eq 等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
-ne 不等于
字符串比较
== 等于
!= 不等于
-n 字符串长度是否大于0
-z 字符串长度是否等于0
文件检查与比较
-d 检查文件是否存在且为文件夹
-e 检查文件是否存在
-f 检查文件是否存在且为文件
-r 检查文件是否存在且可读
-s 检查文件是否存在且不为空
-w 检查文件是否存在且可写
-x 检查文件是否存在且可执行
逻辑运算
&& 短路与
|| 短路或
! 非
10、函数
标签:脚本,文件,shell,...,echo,学习,名称,数组 From: https://www.cnblogs.com/luozhenfei/p/16643604.html