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
取余