天天看点

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退出状态码

$? 保存上个已执行命令的退出状态码

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

默认情况,

shell

脚本以脚本最后一个命令的退出码状态退出

exit n

可以自己指定一个退出码

exit $var1

在exit命令中使用变量

退出码只能是

0~255

,超过则对

256

取余