20171123 Linux shell 基础学习笔记
1. shell 的开始
一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径
其他的 # 都表示注释.
2. shell 的变量
定义变量直接用 variablename= value 就可以 其中变量名与等号之间没有空格.
使用变量的时候 是 ${vairablename} 的方式进行使用 大括号可以有可以没有,但是建议有.
可以使用
for file in `ls /etc/` 的方式来循环取得文件名.
使用do done 的方式来进行循环处理.
#!/bin/bash
for file in `ls /etc`;do
echo ${file}
done
3. 可将变量设置为 只读变量 readonly variablename
unset 可以删除变量.
4. shell变成的参数部分
$1 表示第一个参数 $# 表示参数的个数 $$ 表示当前进程的ID $? 表示退出时是否有异常等.
5. shell 里面数组的概念:
shell 里面数组 用 () 来表示
arrayname=(A B C D )
注意事项: arrayname 等号 以及 括号中间不能有空格.
数组的下标从0 开始
{arrayname[@]} 或者 * 可以遍历出所有的数组元素
{#arrayname[*]} 可以返回数组的元素个数.
6. shell中的运算方法.
bash 中不支持运算 需要通过awk 或者expr 等方式来进行
val=`expr 2 + 2`
echo $val
注意乘法需要增加反斜线\* 来进行表示
使用的是反引号进行表示 而不是 单引号.
7. 比较方法
$a -eq $b 这种方式进行.
-eq -ne -ge -le -gt -lt
布尔运算符
! 非运算 -o 或运算 -a 与运算
逻辑运算符
&& 逻辑and || 逻辑或
文件测试运算符
-b 是否是块设备
-c 是否是字符设备
-d 是否是目录
-f 是否是普通文件
-r 文件是否可读
-w 文件是否可写
-x 文件是否可执行
-s 文件是否为空
-e 文件是否存在
8. shell 编写时容易出错的地方:
if 用[] 来表示bool预算部分
其中 -e 什么的需要有空格区别
if 和面先增加 then 最后增加fi 不能缺少.
9. echo 命令.
echo 用于字符串输出
echo "" 或者不加双引号 显示字符串
echo -e "" 内内容 进行转义
echo '' 原样输出不获取变量不进行转义
echo `date` 显示命令执行结果
echo > filename 将结果定位到文件
echo >>filename 增加到文件的最后一行
read something 将读入的数据作为变量something的value
10. printf的部分内容.
比echo 最大的好处是能够格式化输出字符串.
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
转义字符 使用反斜线.
11. shell 中的流程控制::::::::::::::::::::::::::::::::::::::::::
1)
if [ -e $filename]
then
echo # do something
elif [ ]
then
do something
else
do something
fi
2) for 循环
for some in many
do
do something
done
3) while 循坏
while (())
do
let i++ # for example
done
4) until 循坏
util (())
do
done
跳出循环使用 break
继续循环 使用 continue
12.shell 中的函数
function func()
或者是 func() 进行命令
可以有return语句 在执行完 function 之后通过 $? 来获取返回值.
调用函数时与python
不一样不需要增加() 记住以下.
13.
命令 说明
command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。
14. 文件包含
source 或者是 直接点过来.