文章目录
前言
今天ICT考得依托答辩,想到明天还要考试,只能继续复习操作系统实验的内容🙃
UNIX简单命令
操作系统中常常使用一些简单的UNIX命令,下面是比较常见的:
cat
:连接文件并将内容显示到标准输出,也可以用来查看文件内容或创建新文件。man
:查看 UNIX 命令的手册页,提供命令的用法和选项等信息。who
:找出谁登录到系统,显示用户的登录名、终端、登录时间等。ls
:列出文件和目录,可以使用不同的选项来显示更多的信息,如-a
显示隐藏文件,-l
显示长格式,-R
显示子目录等。cp
:复制文件或目录,可以使用-i
选项来在覆盖前询问,-r
选项来递归复制子目录等。mv
:重命名或移动文件或目录,可以使用-i
选项来在覆盖前询问,-f
选项来强制执行等。rm
:删除文件或目录,可以使用-i
选项来在删除前询问,-r
选项来递归删除子目录等。touch
:更新文件的访问和修改时间,如果文件不存在则创建空文件。mkdir
:创建新目录,可以使用-p
选项来创建多级目录。cd
:改变当前目录,可以使用.
表示当前目录,..
表示上级目录,~
表示用户的主目录等。rmdir
:删除空目录,如果目录不为空则无法删除。pwd
:打印当前目录的绝对路径。chmod
:更改文件或目录的访问权限,可以使用数字或符号来表示不同的权限,如r
表示读,w
表示写,x
表示执行等。
Linux 中的权限是用来限制对文件或目录的访问和操作的机制,权限分为三种类型:读 (r)、写 (w)、执行 (x)。每种类型的权限可以用一个数字来表示,如下:
- r: 表示可读取,用数字 4 表示
- w: 表示可写入,用数字 2 表示
- x: 表示可执行,用数字 1 表示
- -: 表示没有权限,用数字 0 表示
Linux 中的权限还分为三种属组:用户 (u)、组 (g)、其他 (o)。每个文件或目录都有一个拥有者 (user) 和一个所属组 (group),还有其他以外的用户 (other)。每个属组都可以设置不同的权限,用三个数字来表示,如下:
- u: 表示文件或目录的拥有者,用第一个数字表示
- g: 表示与文件或目录的拥有者属于同一个群组的用户,用第二个数字表示
- o: 表示其他以外的用户,用第三个数字表示
chmod有两种模式:Symbolic Mode 和 Absolute Mode。
Symbolic Mode 是使用字母和符号来表示权限的变更,例如:
chmod u+x file
表示为文件的拥有者增加执行权限chmod g-w file
表示为文件的所属群组取消写入权限chmod o=r file
表示为其他用户设定唯一的读取权限chmod a+rwx file
表示为所有用户增加读、写、执行权限
Absolute Mode 是使用数字来表示权限的设定,每个数字代表一组权限,数字的范围是 0 到 7。例如:
chmod 777 file
表示为所有用户设定读、写、执行权限,相当于chmod a+rwx file
chmod 755 file
表示为文件的拥有者设定读、写、执行权限,为文件的所属群组和其他用户设定读、执行权限,相当于chmod u=rwx,g=rx,o=rx file
chmod 644 file
表示为文件的拥有者设定读、写权限,为文件的所属群组和其他用户设定读权限,相当于chmod u=rw,g=r,o=r file
Linux之外,Unix还有一些重定向符号,例如:
>
符号是输出重定向符号,表示将一个命令的标准输出重定向到一个文件中,如果文件不存在则创建,如果文件已存在则覆盖。>>
符号也是输出重定向符号,表示将一个命令的标准输出追加到一个文件的末尾,如果文件不存在则创建,如果文件已存在则不覆盖。<
符号是输入重定向符号,表示将一个文件的内容作为一个命令的标准输入,相当于从文件中读取数据。<<
符号也是输入重定向符号,表示将一段文本作为一个命令的标准输入,直到遇到指定的结束符为止,相当于从键盘输入数据。
例如:
echo "Hello World" > file.txt
表示将字符串 “Hello World” 输出到 file.txt 文件中,覆盖原有内容。echo "Hello World" >> file.txt
表示将字符串 “Hello World” 追加到 file.txt 文件的末尾,不覆盖原有内容。cat < file.txt
表示将 file.txt 文件的内容作为 cat 命令的输入,相当于cat file.txt
。cat << EOF
表示将接下来的文本作为 cat 命令的输入,直到遇到 EOF 为止,相当于从键盘输入文本。
SHELL脚本编写
在Linux中,我们经常bash 命令来执行shell脚本。一般以bash语法编写的脚本文件,应该在第一行声明:#!/bin/bash
变量
在shell中,使用等号 =
将变量名和值连接起来,如 name="Tom"
,注意等号两边不能有空格。
还可以使用 unset
命令删除变量,删除后的变量不能再被使用,如 unset name
。
如果变量包含换行符,可以使用转义符\n
表示,或者使用\ (\空格)
表示。
在引用变量时,可以使用
- 美元符号
$
加上变量名,如echo $name
。 - 花括号
{}
包围变量名,如echo ${name}
。 - 使用反引号
`
或者$()
包围命令,表示命令替换,即先执行命令,然后将结果赋值给变量,如date=`date +%Y-%m-%d`
或date=$(date +%Y-%m-%d)
。
当然,其中最后的命令替换,还有如下功能:
echo ($data)
是将括号中的变量 $data 的值输出到标准输出,如果 $data 没有定义或为空,那么就什么也不输出。例如,如果 $data=hello,那么echo ($data)
就会输出 hello,如果 $data 没有赋值,那么 echo ($data) 就不会输出任何内容。echo `data`
是将反引号中的 data 作为一个命令执行,然后将执行结果输出到标准输出,如果 data 不是一个有效的命令,那么就会报错。例如,如果 data=date,那么 echodata
就会输出当前的日期和时间,如果 data=abc,那么echo `data`
就会提示 abc: command not found。
使用花括号引用变量时,可以对变量进行一些操作,如截取、替换、赋值等。
${var:n}
表示从变量var
的第n
个字符开始截取,直到末尾。例如,如果var=hello
,那么${var:1}
就是ello
。${var:n:m}
表示从变量var
的第n
个字符开始截取,长度为m
。例如,如果var=hello
,那么${var:1:2}
就是el
。${var/pattern/replacement}
表示将变量var
中第一个匹配pattern
的部分替换为replacement
。例如,如果var=hello
,那么${var/l/x}
就是hexlo
。${var//pattern/replacement}
表示将变量var
中所有匹配pattern
的部分替换为replacement
。例如,如果var=hello
,那么${var//l/x}
就是hexxo
。${var:-string}
表示如果变量var
为空或未定义,那么用string
替换,否则保持不变。例如,如果var=hello
,那么${var:-world}
就是hello
,如果var
为空,那么${var:-world}
就是world
。${var:=string}
表示如果变量var
为空或未定义,那么用string
替换,并且将string
赋值给var
,否则保持不变。例如,如果var=hello
,那么${var:=world}
就是hello
,如果var
为空,那么${var:=world}
就是world
,并且var
的值也变为world
。
单双引号引用变量时,有以下区别:
- 单引号
'
表示引用的内容是固定的,不会进行变量替换、命令替换、转义等操作。例如,如果var=hello
,那么echo '$var'
就是$var
,而不是hello
。 - 双引号
"
表示引用的内容是可变的,会进行变量替换、命令替换、转义等操作。例如,如果var=hello
,那么echo "$var"
就是hello
,而不是$var
。
输入
read
命令是用来从标准输入或其他文件描述符中读取一行数据,并赋值给一个或多个变量。read 命令有一些选项,可以控制读取的方式,如-p
可以显示提示信息,-s
可以隐藏输入的内容, -t
可以设置输入的时间限制等。
运算
expr
运算是用来执行整数或字符串的运算,它需要用空格分隔每个参数,用反斜杠转义特殊字符,用双引号括起字符串。例如,expr 2 + 3
表示整数加法,expr length "hello"
表示计算字符串长度,expr substr "hello" 2 3
表示截取字符串。$(( ))
运算是用来执行数学运算和逻辑运算,它可以使用 C 语言的语法,不需要空格或转义,可以直接引用变量。例如,((a=2+3))
表示赋值运算,((a++))
表示自增运算,((a>5 && b<10))
表示逻辑运算。$[ ]
运算也是用来进行数学运算和逻辑运算
函数
函数的定义如下:
[ function ] funname [()]
{
action;
[return int;]
}
同删除变量一样,删除函数也可以使用 unset 命令,不过要加上 .f 选项,unset .f function_name
。
控制语句
if
if…then 语句是用来进行条件判断和控制流程的,它的基本语法如下:
if [ 条件判断式 ]; then
# 在条件为真时执行的命令
fi
常见的条件有:
-eq
:等于。例如:if [ "$a" -eq "$b" ]; then
-ne
:不等于。例如:if [ "$a" -ne "$b" ]; then
-gt
:大于。例如:if [ "$a" -gt "$b" ]; then
-lt
:小于。例如:if [ "$a" -lt "$b" ]; then
-ge
:大于等于。例如:if [ "$a" -ge "$b" ]; then
-le
:小于等于。例如:if [ "$a" -le "$b" ]; then
与文件有关是可以有:
-e
:文件存在。例如:if [ -e "$file" ]; then
-f
:文件是普通文件。例如:if [ -f "$file" ]; then
-d
:文件是目录。例如:if [ -d "$dir" ]; then
-r
:文件可读。例如:if [ -r "$file" ]; then
-w
:文件可写。例如:if [ -w "$file" ]; then
-x
:文件可执行。例如:if [ -x "$file" ]; then
case
case 语句是用来根据变量的不同取值,执行不同的命令序列的。它的语法如下:
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
...
*)
默认命令序列
;;
esac
while
while 语句是用来重复执行一组命令,直到条件为假时停止的。它的语法如下:
while [ 条件判断式 ]
do
命令序列
done
for
for 语句是用来遍历一个列表中的每个元素,并执行相应的命令的。它的语法如下:
for 变量名 in 列表
do
命令序列
done
在列表中可以使用seq
,seq
命令是用来生成一个数字序列的,可以用在 for 语句中,指定循环的范围和步长。它的语法如下:
seq [选项]... [首数] [步长] [尾数]
例如:
seq 5
表示输出从 1 到 5 的连续整数,每个数占一行。
seq 2 5
表示输出从 2 到 5 的连续整数,每个数占一行。
seq 2 2 10
表示输出从 2 到 10 的整数,每次增加 2,每个数占一行。
它的表达式也可以使用C格式:
for ((i=1;i<=3;i++))
do
命令序列
done
break & continue
- break 命令是用来跳出当前的循环,继续执行循环外的命令的。
- continue 命令是用来跳过当前的循环,继续执行下一次的循环的。
Comments NOTHING