Linux学习--软件编程(shell命令)
1.软件编程学习内容
- IO操作文件
- 多任务编程
- 网络编程
- 数据库编程
2.shell命令
2.1 常用的shell命令
1.基本的shell命令
ls、cd、touch、rm、mkdir、rmdir、cp、mv
2.文件查看命令
cat:查看文件中的内容
使用形式:cat 文件名
head:查看文件开头内容
使用形式: head -n 行数 文件名
tail:查看文件末尾内容
使用形式: tail -n 行数 文件名
3.通配符
*:匹配任意长度、任意字符的文件
使用形式:ls file*.txt
?:匹配一位长度、任意字符的文件名
使用形式:ls file_?.txt
[]:匹配一位长度、指定字符的文件名
使用形式:ls file_[1,3,5].txt (匹配1,3,5的文件)
ls file_[1-5].txt(匹配1到5的文件)
ls file_[^3].txt(匹配除3以外的文件)
4.文件查找命令
find:查找文件
使用形式:find . -name 文件名
查找包含某个字符串的文件
使用形式:find . -type f -print0 | xargs -0 grep -l "字符串"
whereis: 查找二进制可执行程序
使用形式: whereis valgrind
5.管道
将前面命令的输出作为后续命令的输入
./a.out | grep "字符串"
ls file* | grep ".sh"
6.重定向
将原本要输出在终端的内容定向到文件中
覆盖重定向(将原来的内容覆盖):echo "hello world" > file.txt
追加重定向(将原内容末尾添加新内容)echo "hello world" >> file.txt
7.常见命令
echo命令:在终端显示内容
使用形式:echo "hello world"
grep命令:查找包含字符串对应的行并显示
使用形式:grep "字符串" 文件名
8.压缩和解压命令
.tar.gz格式
压缩:tar -zcvf 文件名.tar.gz 目录名 /*
解压:tar -zxvf 文件名.tar.gz
.tar.bz2格式
压缩:tar -jcvf 文件名.tar.bz2 目录名 /*
解压:tar -jxvf 文件名.tar.bz2
9.用户管理命令
useradd:新建用户
sudo useradd 用户名
userdel:删除用户
sudo userdel 用户名
passwd:修改密码
sudo passwd 用户名
su:切换用户
su 用户名exit 退出当前用户
chmod:修改文件权限
chmod 权限值 文件名第一组rwx:创建文件的用户对文件是否拥有读写执行权限 第二组rwx:创建文件用户同组用户对文件是否拥有读写执行权限 第三组rwx:其余人是否拥有读写执行权限
chown:修改文件的所属用户
chown 用户名 文件名
chgrp:修改文件所属组
chgrp 组名 文件名
2.2 shell脚本
1.编程语言的分类
编译型语言:先编译再运行
- 有丰富的数据类型、擅长计算
- 执行效率高
- 开发效率低
- C、C++、C#、java
解释型语言:边编译边运行
- 擅长对系统维护管理
- 执行效率低
- 开发效率高
- shell、Python、javascript
2.shell脚本编程
脚本的本质就是一系列shell命令的集合
1.编写步骤
编写脚本文件
vim filename.sh
使用chmod命令为脚本加上执行权限
chmod +x filename.sh
运行脚本
./filename.sh
2.指定脚本对应的运行shell
#!/bin/bash
3.shell脚本的输入和输出
输出
echo $filename
输入
read filename
4.shell 脚本中的引号
单引号
- 原封不动打印引号的内容
echo '$filename'
双引号
- 将双引号中的变量替换成对应的值打印
echo "$filename"
倒引号
将引号中的内容当作命令来处理
echo `seq 10`
5.shell中的变量
环境变量
echo "$HOME" echo "$PWD" echo "$PATH" ...
位置变量
$0:脚本的名称 $1:执行脚本时传入的参数1 $2:执行脚本时传入的参数2 $3:执行脚本时传入的参数3 ... ... $#:传入参数的个数 $?:是一条shell语句执行的结果 $$:脚本运行的进程编号
自定义变量
vallu=0 使用变量要加上$
6.分支结构
if分支
基本结构if 表达式 then语句块 else语句块 fi
表达式可以用test命令实现 -gt > -lt < -ge >= -le <= -eq == -ne !=-b 检测文件是否存在,并判断是否为块设备 -c 检测文件是否存在,并判断是否为字符设备 -d 检测文件是否存在,并判断是否为目录文件 -e 检测文件是否存在 -f 检测文件是否存在,并判断是否为普通文件 -L 检测文件是否存在,并判断是否为链接文件 -P 检测文件是否存在,并判断是否为管道文件 -S 检测文件是否存在,并判断是否为套接字文件test 可以用 [ ]代替
case分支
基本结构case 变量名 in常量1)语句;; 常量2)语句;;常量3)语句;;*)语句 esac
7.循环结构
while循环
while 表达式 do语句块 done
until
until 表达式 do语句块 done
for
for i in 数据集 do语句块 done
8.数组
#!/bin/bash array=("hello" "world" "how" "are" "you") i=0 echo ================================ for ((i = 0; i < 5; i++)) do echo ${array[$i]} done echo ================================ echo "${array[*]}
9.函数
#!/bin/bash add() { sum=`expr $1 + $2` echo "$sum" return $sum } read num1 read num2 #获得函数内输出的字符串 ret=`add $num1 $num2` #打印函数的运行的值 echo "$?" #打印函数内输出的字符串 echo "ret = $ret"