Linux命令行与shell脚本编程大全笔记(构建基本脚本)

date; who 两个命令一起运行 ,who输出当前是谁登录了系统
#!/bin/bash 创建脚本时,必须在文件第一行指定要使用的shell,shell不会解释#开头的行,除了第一行

执行脚本
./test.sh 要求将文件的执行权限加上(chmod u+x test.sh
sh test.sh 可以直接执行

显示消息
echo this is a test 不加任何引号可以打印this is a test
echo " this is a new test 'hahaha' " echo可以用单引号或者双引号来划定字符串,文本用了一种引号,则划定字符串需要另外一种引号

echo -n  "haha:"
date
pwd

-n 可以将echo的下一个命令输出拼接在当前输出后面
echo " i have \$15 , i am a richer, hahaha" 反斜杆表示转义,一般变量引用的时候用$name 或者 ${name}

用户变量
*由字母,数字,下划线组成的字符串,长度不超过20
*用等号赋值,变量,等号,值之间不可以有空格!!!
*shell脚本会自动决定变量的数据类型,脚本中的变量如果不经过修改,会保持值
*引用变量的时候需要用美元符$,赋值的时候不需要

命令替换 – shell中最有用的特性之一

  • 反引号字符(`)
  • $() 格式

today=$(date) 变量名,等号,值之间没有空格, shell会运行替换符号中的命令,并将命令输出结果赋给变量
today=$(date +%y%m%d) date的格式化输出1
*命令替换会创建一个子shell来运行命令,子shell执行的命令是无法使用脚本中创建的变量的(此处不明白,试过是可以使用的)

输出重定向
> 将命令的输出发送到一个文件中,覆盖文件原有内容(全覆盖)
>> 追加数据到文件中

输入重定向
<输入重定向将文件的内容重定向到命令
wc < a.txt 文本计数,在命令行上,命令总是在最左侧,而重定向符号指向数据流动方向
<< 内联输入重定向,将数据输入即可

wc << EOF
>test1
>test2
>test3
>EOF

EOF 为标记,表示输入内容的开始和结束,标记可以为任意字符,前后匹配即可

管道
command1 | command2 Linux实际是同时运行这两条命令,第一个命令产生输出的同时,输出会立即送给第二个命令,数据传输不会用到任何文件和缓冲区
rpm -qa | sort | more 生成系统上安装的包的list并排序后分页查看

expr命令
expr 1 + 5 该命令允许在命令行上处理数学表达式
expr 能够识别少数的数学和字符串操作
expr的一些操作详见该文章: 看示例
https://blog.csdn.net/guhong5153/article/details/6542995

使用方括号
var1=$[1 + 2] 将数学运算的结果给变量: 用美元符和方括号代替expr
var1=$[$var2 * $var3] 在脚本中使用变量,不用担心 * 号,shell知道不是通配符
*bash shell 的数学运算符只支持整数运算

浮点的解决方案
bc bash 计算器,能够识别数字,变量,注释,表达式,编程语句,函数
bc -q 不显示bash计算器冗长的欢迎信息
quit退出计算器
scale=4 内建变量控制浮点数的位数,默认为0
print 允许在bc中打印变量和值

在脚本中使用bc

var1=$(echo " scale=4; 3.44/5 " | bc) 
echo $var1

使用内联输入重定向

var5=$(bc << EOF
scale = 4
a1 = (var1 * var2)
b1 = (var3 * var4)
a1 + b1
EOF
)

退出脚本
0~255退出状态码
$? 保存上个已执行命令的退出状态码

状态码 描述
0 命令成功结束
1 一般性未知错误
2 不适合的shell命令
126 命令不可执行
127 没找到命令
128 无效的退出参数
128+x 与Linux信号x相关的严重错误
130 通过Ctrl+C终止的命令
255 正常范围之外的退出状态码

默认情况,shell脚本以脚本最后一个命令的退出码状态退出
exit n 可以自己指定一个退出码
exit $var1 在exit命令中使用变量
退出码只能是0~255,超过则对256取余

猜你喜欢

转载自blog.csdn.net/qq_34595352/article/details/93162152