Shell学习笔记
# Shell编程
- 关于Shell
Shell 是一种用户与操作系统内核进行交互的命令行解释器(command-line interpreter),也是一种编程语言。
用户可以通过 Shell 运行系统命令、执行脚本、管理文件和目录、进行文件操作、编写简单的自动化任务等。
# shell 基础
.sh 文件第一行需要声明所用 shell ,通常为:
#!/bin/bash
多个命令可用分号间隔并执行,如:
A ; B ;C
。执行.sh文件要给予其 x 权限,即:
u + x
取变量值方法为在变量前增加美元符号,例:$HOME,当存在冲突时,要加转义字符
"\"
将命令赋值给变量的方法:
(1) 使用反引号字符(``);
(2) 使用$()
输入重定向,即将文件内容输出到命令中,基本语法为
command < inputfile
(1)有两种输入重定向方式,分别为 < 和 << . 示例:对a.txt 文件中的文本进行排序 sort < a.txt (2)内联输入重定向,语法为command << mark ,mark为指定的标记符,用来标记输入数据的开始和结束. 示例: `wc << EOF >string1 >string2 >string3 >EOF `
1
2
3
4
5
6
7
8
9
10
11
12输出重定向,即将命令结果输出到文件中,基本语法为
command > outputfile
(1)有两种重定向方式,分别为 > 和 >> . (2)两种方式的区别:> 是写入到文件,故而会清空原文件内容,>> 则是追加到文件末尾.
1
2
3管道命令,用 | 符号将前一个命令的输出作为后一个命令的输入,基本语法为
command1 | command2
数学表达式操作,基本语法为:
$[operation]
,即用中括号 括住数学表达式,示例:var1=$[3 * 9]
查看命令退出码
$?
,用以判断命令是否正常结束。通常,退出码为0时表示命令成功结束,否则为命令执行出错异常退出;退出状态码区间 0~255。可用 exit 指定退出码,例:
exit 30
if-then 语法结构
if command then commands fi
1
2
3
4或
if command ; then commands fi
1
2
3if-then-else语法结构
if command then commands else commands fi
1
2
3
4
5
6
7test 命令语法结构:
test conditions
,其主要用途为:- 数值比较
- 字符串比较
- 文件比较
也可用另一种表达方式:
if [condition] then commands fi
1
2
3
4多条件判断语法
[condition1] && [condition2]
[condition1] || [condition2]
if-then 高级特性
(1)使用双括号运算数学表达式,基本语法为((expression))
。示例:if (( $val ** 2 > 90)) then ((val2 = $val * 10)) fi
1
2
3
4(2)使用双方括号进行模式匹配,基本语法为
[[expression]]
。示例:if [[ $USER == r* ]]
1for 循环的基本语法:
for i in list do commands done
1
2
3
4字段分隔符
IFS
用以分割长字符串#默认分隔符为空格 #当需要调整分隔符为回车或其他字符时,使用下面的代码改变IFS的值 IFS=$'\n' #可指定多个分隔符,将字符拼接起来即可,如: IFS=$'\n':;
1
2
3
4
5
6
7for 循环搭配通配符 ,示例:
for f in /home/test/*
1C语言风格for循环,示例:
for ((i=1;i<10;i++))
1while 循环语法:
while test command do commands done
1
2
3
4until 语法:
case 语法:
break、continue使用 与其它语言相似,break可指定跳出层数。
循环输出处理方式
- 重定向方式,示例:
for ((a=1;a<10;a++)) do echo "a is $a" done > demo.txt
1
2
3
4 - 管线方式,示例:
for(....) do ..... done | sort
1
2
3
4
5
命令行参数说明
$0 : 程序名
$1-9 : 参数1-参数9
${10-...} :超过9个参数的参数表示
$# : 表示参数个数
$* : 表示所有参数构成的单个字符串
$@ : 表示所有参数构成的同一字符串的多个独立的单词
读取用户输入
(1)read 命令
read 提示
read -p "...." name
read 超时 : -t后为设定的秒数
read -t 10 -p "" name
read 隐藏输入
read -s -p "" password
read 读取文件
cat file1 | while read line do ..... done
1
2
3
4捕捉信号
后台运行脚本,在后面加 & 符号
定期执行命令:
crontab
函数编程
(1)基本函数语法
function a{
commands
}
2
3
或
a(){
commands
}
2
3
(2)使用return 返回值
(3)使用echo 输出值
(4)局部变量和全局变量
局部变量定义需在变量前使用
local
全局变量的定义可以使用
global
(5)变量的传递及处理
(6)库文件创建/引入:source 或 .
# ${} 变量操作
- 取变量值
说明:取得对应变量的值,等同$var
#示例
a=hello
echo ${a}
#输出:hello
2
3
4
5
- 取变量长度
#示例
a=hello
echo ${#a}
#输出:5
2
3
4
5
- 进行变量替换:${var/word1/word2} 说明:将变量中的指定字符替换成目标字符
#示例
a="My name is Bob"
echo ${a/My/Your}
#输出: Your name is Bob
2
3
4
5
6