Bash ——shell

Bash作为用户与操作系统之间的接口,让用户通过命令行输入各种指令来控制和操作计算机系统。

shell的两种解释:

1.linux命令解释器

Terminal 终端 ------》shell命令 ------》 Linux kernel (内核)

Linux内核的作用:

1.硬件的管理

2.内存的管理

3.文件的管理

4.进程的调度

Linux的基本命令:

1. ls

  • ls -l:列出当前目录下的文件和目录,以长格式显示,包含权限、所有者、组、大小、时间戳等信息。

  • ls -a:列出当前目录下的所有文件,包括隐藏文件(以.开头的文件)。

  • ls -F:在每个文件名后加上一个符号,表明文件类型,如/表示目录,*表示可执行文件。

  • ls -h:以人易读的格式显示文件大小,如KB、MB、GB。


2. touch

touch 1.c:创建一个名为1.c的新文件,如果文件已存在,则更新文件的时间戳。


3. rm

  • rm -f:强制删除文件,不提示确认。
  • rm -r:递归删除目录及其内容。
  • rm -i:在删除前询问用户确认。

4. mkdir

•mkdir dir1 dir2:创建一个或多个目录。

5. rmdir

•rmdir 123:删除空目录123。

6. cd

•cd ..:移动到上级目录。

•cd ../../../..:向上移动四级目录。

•cd ~:移动到用户的家目录。

•cd /home/linux/20190214:移动到指定的绝对路径目录。

7. cp

•cp 1 2:将文件1复制为文件2。

•cp -av srcdir tgtdir:递归复制目录srcdir到tgtdir,同时显示详细的进度信息。

8. mv

•mv 1 2:将文件1重命名为2,或者将文件1移动到目录2(如果2是一个目录)。

9.cat

cat filename1:显示filename1文件的内容。

10 操作符:管道 |

管道( | )是Linux中非常强大的一个概念,它允许将一个命令的输出作为另一个命令的输入。这极大地增强了命令的组合能力,使得可以轻松地进行多步数据处理。

•cat /etc/passwd | less:先使用cat命令读取/etc/passwd文件的内容,然后将这些内容传递给less命令,less允许你分页查看文件内容,可以使用键盘箭头键滚动浏览,q键退出。

•cat /etc/passwd | grep new -n:先读取/etc/passwd的内容,然后使用grep命令搜索包含单词new的行,并显示行号(-n选项)。

11. whereis

whereis命令的输出通常分为三部分:

•b(binary):二进制文件的位置。

•m(manual):手册页的位置。

•s(source):源代码文件的位置。

12. grep

在文件中查找内容

bash 复制代码
grep [OPTIONS] PATTERN [FILE]...

例如,搜索文件example.txt中包含"hello"的行:

bash 复制代码
grep hello example.txt

bash使用选项-n

-n选项告诉grep在输出中显示匹配行的行号。

bash 复制代码
grep 'main' ./20170408/sec3/01socket/ser.c -n

重定向

改变命令的输入和输出目的地,通常用于将命令的输出保存到文件中,或者将文件内容作为命令的输入

覆盖重定向 >

将命令的输出写入到指定的文件中,如果文件已经存在,原来的文件内容会被覆盖(清空)。

bash 复制代码
cat t1 t2 > t3

将t1和t2两个文件的内容合并,然后写入到t3文件中。如果t3文件已经存在,其原有内容会被覆盖。

追加重定向 >>

将命令的输出写入到文件中,但与覆盖重定向不同的是,它会在文件的末尾追加内容,而不是覆盖原有的内容。

压缩和解压命令

解除压缩:

tar -zxvf 文件名.tar.gz

.tar.gz 和 .tgz 打包并gz压缩

压缩(cz打包+压缩):tar czvf FileName.tar.gz DirName

解压(xz解包+解压):tar xzvf FileName.tar.gz

2.shell脚本

解释型语言

边翻译边执行

shell脚本的本质就是一系列shell命令的集合

用途:

•系统维护:定期清理日志、备份数据等。

•环境配置:安装软件包、设置环境变量等。

•数据处理:批量修改文件、分析日志数据等。

•网络监控:定期检查服务器状态、发送警报邮件等。

1.shell脚本编写流程:

1.vim XX.sh #!/bin/bash

2.编写脚本

3.chmod +x XX.sh

  1. ./XX.sh

/etc/ 配置文件

Permission denied 权限不足

解决办法 :chmod 修改文件的权限


如何运行Shell脚本

  1. 赋予执行权限:使用chmod命令给脚本添加执行权限。
bash 复制代码
chmod +x scriptname.sh
  1. 执行脚本:

•直接执行(推荐):

bash 复制代码
./scriptname.sh

bash

•通过解释器执行: bash scriptname.sh


2.shell变量

1.环境变量: env

PATH:保存当前工作的默认路径

PWD:当前所在的工作路径

HOME:当前登录用户的家目录

...

2.main(int argc,char* argv[])

argc:代表"argument count"(参数计数),是一个整型变量,表示传递给程序的命令行参数的数量。这包括程序本身的名称,也就是argv[0]。

argv:代表"argument values"(参数值),是一个指向字符指针数组的指针,其中每个元素指向一个字符串,这些字符串就是命令行参数。argv[0]通常包含程序的名称,argv[1]是第一个参数,依此类推。每个字符串都以空字符'\0'结尾。

在很多编程语言中,包括C、C++和Shell脚本中,函数返回0通常表示成功,返回非0值通常表示某种形式的错误或异常情况。

3.位置参数

位置参数是指在脚本调用时通过命令行传递给脚本的参数。这些参数可以通过特殊的变量$0到$9来访问:

•$0:脚本文件名。这可以用来引用脚本本身的名字。

•$1:第一个参数。

•$2:第二个参数。

•...

•$9:第九个参数。

注意,位置参数的个数实际上可以超过9个,但需要使用${10}这样的语法来访问第十个及以后的参数。

4.内置变量

内置变量,用于获取脚本执行过程中的特定信息:

•$#:传入参数的个数。这可以帮助脚本确定有多少参数被传递进来。

•$?:上一条命令的退出状态。这可以用来检查上一个命令是否成功执行(0表示成功,非0表示失败)。

•$$:当前Shell的PID(进程ID)。这可以用于与其他进程通信或在日志中标识脚本实例。

bash 复制代码
#!/bin/bash

# 输出脚本文件名和传入的参数
echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"

# 输出参数个数
echo "Number of arguments: $#"

# 检查上一句命令的执行结果
echo "Exit status of last command: $?"

# 输出当前Shell的PID
echo "Current Shell PID: $$"

# 拷贝文件
cp /etc/456 ./

# 读取输入并输出
read -p "Enter a number: " a
echo "You entered: $a"

# 算术运算
b=456
c=$((a + b))
echo "The sum is: $c"
bash 复制代码
./3.sh /etc/passwd 123

Script name: ./3.sh

First argument: /etc/passwd

Second argument: 123

Number of arguments: 3

Exit status of last command: 0

Current Shell PID: 12345

Enter a number: 123

You entered: 123

The sum is: 579

相关推荐
爱吃喵的鲤鱼1 分钟前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
dessler14 分钟前
Linux系统-ubuntu系统安装
linux·运维·云计算
向阳121820 分钟前
Dubbo负载均衡
java·运维·负载均衡·dubbo
荒Huang1 小时前
Linux挖矿病毒(kswapd0进程使cpu爆满)
linux·运维·服务器
海阔天空_20131 小时前
Python pyautogui库:自动化操作的强大工具
运维·开发语言·python·青少年编程·自动化
桥田智能1 小时前
气爪在自动化装配线中是如何应用的?
运维·自动化
九河云2 小时前
如何选择适合的AWS EC2实例类型
服务器·云计算·aws
€☞扫地僧☜€3 小时前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
hjjdebug3 小时前
linux 下 signal() 函数的用法,信号类型在哪里定义的?
linux·signal
其乐无涯3 小时前
服务器技术(一)--Linux基础入门
linux·运维·服务器