ubuntu使用bash解析器
/bin/bash
1 脚本格式
在 Linux 下有一门脚本语言叫做:Shell 脚本,这个脚本语言可以帮助我们简化很多工作,例如编写自定义命令等,所以还是很有必要学习它的基本用法的,一个简单的 hello.sh 脚本像下面这样,第一行 #!/bin/bash 标识该 Shell 脚本由哪个 Shell 解释:
vim file.sh
#!/bin/bash
echo "Hello World!"
赋予权限才可以执行:
# 赋予可执行权限
chmod a+x hello.sh
# 执行
./hello.sh
# 结果
Hello World!
sh +相对路径/绝对路径
bash+相对路径/绝对路径
2 变量
2.1 系统变量预定义变量
常用系统变量
HOME,PWD,SHELL,USER等
获取变量的值
$变量名
2.2 自定义变量
- 基本语法:
定义变量:变量名=变量值 - 撤销变量:unset 变量名
- 声明静态变量:readonly 变量,不能unset
export 变量 使得任何地方都能调用
2.3 特殊变量
- $0 :脚本文件名
- $1-9 :第 1-9 个命令行参数名
- $# :命令行参数个数
- $@ :所有命令行参数
- $* :所有命令行参数
- $? :前一个命令的退出状态,可用于获取函数返回值
- $$ :执行的进程 ID
#!/bin/bash
echo "print $"
echo "\$0 = $0"
echo "\$1 = $1"
echo "\$2 = $2"
echo "\$# = $#"
echo "\$@ = $@"
echo "\$* = $*"
echo "\$$ = $$"
echo "\$? = $?"
print $
# 程序名
$0 = ./hello.sh
# 第一个参数
$1 = 1
# 第二个参数
$2 = 2
# 一共有 5 个参数
$# = 5
# 打印出所有参数
$@ = 1 2 3 4 5
# 打印出所有参数
$* = 1 2 3 4 5
# 进程 ID
$$ = 9450
# 之前没有执行其他命令或者函数
$? = 0
3 运算符
我们经常需要在 Shell 脚本中计算,掌握基本的运算方法很有必要,下面就是 4 种比较常见的运算方法,功能都是将 m + 1:
1. m=$[ m + 1 ]
2. m=expr $m + 1 # 用 “ 字符包起来
3. let m=m+1
4. m=$(( m + 1 ))
4 条件判断
4.1. test命令
test命令,可以对特定条件进行测试,并通过echo $?返回状态值来判断条件是否成立(当返回值为 0 表示条件成立/正确/执行成功,当返回值为1表示不成立/错误/执行异常)。
格式一:test 条件表达式
格式二:[ 条件表达式 ] #方括号与条件表达式之间需要至少一个空格进行分隔
4.2.文件测试与整数测试
格式:[ 选项 文件/目录路径 ] 或 test 选项 文件/目录路径
test 选项 $变量
[ 选项 $变量 ]
常用的操作符:
-e:判断目录或文件是否存在(Exist);
-d:判断是否为目录或者判断目录是否存在(Directory);
-f:判断是否为文件或文件是否存在(File)0;
-L:判断是否为符号链接(软链接)或判断是否存在(Link);
-r:判断当前用户对某个文件/目录是否有读取权限(Read);
-w:判断当前用户对某个文件/目录是否有写入权限(Write);
-x:判断试当前用户对某个文件/目录是否有可执行权限(Excute);
————————————————
版权声明:本文为CSDN博主「爱喝鱼片汤」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2401_83883919/article/details/138561174
格式: test 整数1 操作符 整数2 或 [ 整数1 操作符 整数2 ]
常用的操作符:
-eq:等于 ==
-ne:不等于 !=
-gt:大于 \>
-lt:小于 \<
-le:小于等于
-ge:大于等于
————————————————
版权声明:本文为CSDN博主「爱喝鱼片汤」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2401_83883919/article/details/138561174
Linux中的三元运算
[ 表达式 ] || 命令1 #如果表达式1条件成立不会执行或运算符后面的命令1,如 果表达式1条件不成立则会执行运算符后面的命令1
[ 表达式 ] && 命令1 || 命令2 #如果表达式1条件成立则执行命令1,如果表达式1条件不成
5.流程控制
5.1 if判断
单分支

双分支

5.2 case 语句


5.3 for循环
语法
for i in arg1 arg2 arg3
for i in{1..10}
for((i=1;i<=10;i++))
执行体用
do
execute command //代码块
done 包裹
5.4 while循环
while循环基础语法
#当条件测试成立(条件测试为真),执行循环
while 条件测试
do
循环体
done
#用for循环和while循环从1-10
[root@manage while]# cat while-01.sh
#!/bin/bash
#for i in {1..10}
#do
#echo $i
#done
i=1
while [ $i -le 10 ]
do
echo $i
let i++
done
#用while循环,从1-9 ,从9-1
[root@manage while]# cat while-02.sh
#!/bin/bash
#用for循环实现
for_numb(){
a=1
b=9
for i in {1..9}
do
echo $a + $b = $[ $a + $b ]
let a++
let b--
done
}
#用while循环实现
a=1
b=9
while [ $a -le 9 ]
do
echo $a + $b = $[ $a + $b ]
let a++
let b--
done
[root@manage while]# sh while-02.sh
1 + 9 = 10
2 + 8 = 10
3 + 7 = 10
4 + 6 = 10
5 + 5 = 10
6 + 4 = 10
7 + 3 = 10
8 + 2 = 10
9 + 1 = 10
#实现乘法
[root@manage while]# cat while-02.sh
#!/bin/bash
a=9
while [ $a -ge 1 ]
do
echo "$a * $a = $[ $a * $a ]"
let a--
done
[root@manage while]# sh while-02.sh
9 * 9 = 81
8 * 8 = 64
7 * 7 = 49
6 * 6 = 36
5 * 5 = 25
4 * 4 = 16
3 * 3 = 9
2 * 2 = 4
1 * 1 = 1
6.read 读取控制台输入
6.1 基本语法
read 选项 参数
-p 指定读取值时的提示符
-t 指定读取值时等待的时间
nn 存储数据的变量名
7. 系统函数
7.1
basename 绝对路径/文件名
截取文件
dirname 绝对路径/文件名
截取路径
7.2 自定义函数
7.2.1.基本语法
函数名() {
命令
}
function 函数名() {
命令
}
function 函数名 {
命令
}
#!/bin/bash
function sum(){
s=$[$1+$2]
echo $s
}
read -p "请输入第一个数" n1
read -p "请输入第二个数" n2
sum $n1 $n2
~
7.2.2 交互累加程序
#!/bin/bash
function sum(){
s=0
for((i=0;i<$1;i++)); do
s=$[$s+$i]
done
echo $s
}
while [ 1 -eq 1 ]; do
read -p "请输入你的数字:" ss
sum $ss
done
~
8 Shell工具
cut命令详解
一、基本语法
cut [选项参数] filename
选项与参数:
-d:分隔符,按照指定分隔符分割列。与 -f 一起使用
-f:依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思(列号,提取第几列)
-c:以字符 (characters) 的单位取出固定字符区间
-b:以字节为单位进行分割
awk
awk完整语法
awk ‘BEGIN {commands} pattern {commands}END{commands}' file1
BEGIN:处理数据前执行的命令
END:处理数据后执行的命令
pattern:模式,每一行都执行的命令
BEGIN和END里的命令只是执行一次
pattern里的命令会匹配每一行去处理
awk -F “:” ‘{print $1,$2,$5}’ /etc/passwd | head -5
awk -F “:” ‘/^root/{print $1 $7}’ passwd
-F ":" : awk选项,指定输入分割符为:,
'{print}' : 固定语法
$1,$2,$5 :输出第一个,第二个,第五个字段
, : 是输出分隔符,如果不加默认是没有分隔符的。
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)
ifconfig ens33 | awk -F " " '/inet /{print $2}'
查询包含inet字符串的第二列数据
ifconfig | awk -F : '/^$/{print NR}'
显示空行的行数
awk -F : '{print "filename:" FILENAME "行号:"NR" 列数:"NF}' passwd
输出文件含有FILENAME的行数和列数
9.正则表达式入门
元字符
| 代码 | 说明 |
|---|---|
| . | 匹配除换行符以外的任意字符 |
| \w | 匹配字母或数字或下划线或汉字 |
| \s | 匹配任意的空白符 |
| \d | 匹配数字 |
| \b | 匹配单词的开始或结束 |
| ^ | 匹配字符串的开始(在集合字符里[^a]表示非(不匹配)的意思 |
| $ | 匹配字符串的结束 |
方括号([])
方括号用于定义一个字符集合,匹配该集合中的任意一个字符。例如,[abc] 表示匹配 a、b 或 c 中的任意一个字符;[a-z] 表示匹配小写字母 a 到 z 中的任意一个;[0-9] 表示匹配数字 0 到 9 中的任意一个。方括号内还可以使用脱字符(^)表示取反,即匹配不在集合中的任意一个字符。例如,[^abc] 表示匹配除 a、b、c 之外的任意一个字符。
相关条目
- Linux操作系统