Shell 学习随笔

匿名 (未验证) 提交于 2019-12-03 00:30:01
1、Shell 是一个用C语言编写的程序,它是用户使用 LInux 的桥梁。是一种命令语言也是一种程序设计语言。

2、创建一个 shell 脚本可以使用 vi/vim 新建一个文件 test.sh ,扩展名为 sh(sh 代表shell)

#!/bin/bash

echo “hello world !"

3、运行 Shell 脚本的方法
4、定义变量
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。

局部变量
环境变量
shell变量

="runoob is a great company"
`expr index "$string" is` # 输出 8
#####
%%%%
9、Shell 传递参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$nn

特殊字符用来处理参数:
$#传递到脚本的参数个数
$*
以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@
与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
9、Shell 基本运算符

注意使用的是反引号 ` 而不是单引号 ‘):
$((表达式)), "*" 不需要转义符号 “\” 否则在Windows系统下需要加上转义符号 “ / “ 。

算数运算符:
+加法
-减法`expr $a - $b` 结果为 -10。
*乘法
/除法
%取余
=赋值a=$b 将把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。
!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。
[$a==$b][ $a == $b ],完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号

关系运算符:

关系运算符只支持数字,不支持字符串。除非字符串的值是数字。
-eq检测两个数是否相等,相等返回 true。
-ne检测两个数是否相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。

布尔运算符
!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有一个表达式为 true 则返回 true。
-a与运算,两个表达式都为 true 才返回 true。

逻辑运算符
[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||逻辑的 OR[[ $a -lt 100 || $b -gt 100 ]] 返回 true

字符串运算符

=检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。
!=检测两个字符串是否相等,不相等返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否为0,不为0返回 true。[ -n $a ] 返回 true。
str检测字符串是否为空,不为空返回 true。

文件测试运算符

用于检测 UNIX 文件的各种属性
-b file检测文件是否是块设备文件,如果是,则返回 true。[ -b $file ] 返回 false。
-c file检测文件是否是字符设备文件,如果是,则返回 true。
-d file检测文件是否是目录,如果是,则返回 true。[ -d $file ] 返回 false。
-f file检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。
-g file检测文件是否设置了 SGID 位,如果是,则返回 true。
-k file检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。
-p file检测文件是否是有名管道,如果是,则返回 true。
-u file检测文件是否设置了 SUID 位,如果是,则返回 true。
-r file检测文件是否可读,如果是,则返回 true。
-w file检测文件是否可写,如果是,则返回 true。
-x file检测文件是否可执行,如果是,则返回 true。
-s file检测文件是否为空(文件大小是否大于0),不为空返回 true。
-e file检测文件(包括目录)是否存在,如果是,则返回 true。

10、Shell echo 命令

#! /bin/bash
printf "%-5s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-5s %-8s %-4.2f\n" 郭靖 男 66.1234



12、流程控制
13、函数
#!/bin/bash

demoFun(){
}



// 带有 return 语句的函数

}

// 带有参数的函数

"第一个参数为 $1 !"
"第二个参数为 $2 !"
"第十个参数为 $10 !"
"第十个参数为 ${10} !"
"第十一个参数为 ${11} !"
"参数总数有 $# 个!"
"作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

第一个参数为 1 !
第二个参数为 2 !
第十个参数为 10 !
第十个参数为 34 !
第十一个参数为 73 !
参数总数有 11 个!
作为一个字符串输出所有参数 1 2 3 4 5 6 7 8 9 34 73 !

参数处理说明
$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

文章来源: Shell 学习随笔
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!