1. 虚拟机重启错误:
由于磁盘有损坏
修复磁盘:
step1:回车后输入root密码
step2:fsck /dev/sda2
step3:fix<y>? yes
step 4:reboot
#### shell基础编程
1. shell程序介绍
(1)shell程序时已文件形式存放批量的linux命令集合,该文件能够被shell解释执行,这种文件就是shell脚本程序,shell文件是文本文件
(2)shell程序通常由一段Linux命令,Shell命令、控制语句以及注释语句构成
(3)shell脚本是纯文本文件,可以使用任何编译器编写,通常以.sh作为后缀名
(4)第一行:指定用哪个程序来编译和执行脚本
#!/bin/bash
#!/bin/sh
(4)除第一行外,使用#表示注释
(5)执行脚本的三种方式
① $ ./test.sh
② $ . test.sh
③ $ sh test.sh
2. 变量的使用
(1)变量名必以字母或下划线开头,后面可以跟字母,数字或下划线。
(2)对大小写敏感
(3)变量的赋值(等号两边不能有空格):$ x=123
变量值的回显:$ echo ${sex}或$ echo $sex
(4)变量作用域
本地变量:只在创建它们的shell程序可用
环境变量(全局变量):在shell的所有用户进程中可用,如果父shell进程产生了子shell进程,则环境变量可被“继承”并复制。环境变量按照惯例需要大写
(5)清除变量:unset variable
(6)显示所有变量:set
3. 位置参量
(1)位置参量是一组特殊的内置变量,通常被shell脚本用来从命令行接收参数,或被函数用来保存传递给它的参数
(2)执行shell脚本时,用户可以通过命令行向脚本传递信息,跟在脚本后面的用空格隔开的字符串都成为位置参量
(3)脚本使用这些参数时,需要通过位置参量引用:$1表示第一个参数,$2表示第二个参数,从${10}开始,需要用花括号括起来
(4)表示位置参数的个数:$#
(5)以单个字符串显示所有位置参量:$*
(6)脚本运行的当前进程号:$$
(7)表示最后一个后台运行的进程的进程号:$!
(8)显示前面最后一个命令的退出状态,0表示没有错误,其他任何值表示有错误:$?
应用中通常会在关键步骤后判定$?,以确定关键步骤的执行是否正常。尤其是调度系统里需要监控sh返回码
shell脚本的返回码取决于最后一个命令的返回码
(9)如果位置参数中有空格,需要用引号引起
4. 数组
$ arr=(zhangsan lisi wangwu) //数组赋值
$ echo ${arr[0]} //读取数组中第一个元素
$ echo ${arr[*]} //显示数组中的所有字符
$ echo ${#arr[*]} //显示数组中字符个数
$ arr[0]=zhaoliu //更改第一位元素
5. date(时间)
(1)e.g.以年月日时分表的形式展示时间
$ date +%Y/%m/%dT%H:%M:%S
(2)显示时间变量
date1=$(date +%Y/%m/%dT%H:%M:%S)
echo ${date1}
(3)显示两天前的日期
date2=$(date --date='2 days ago' +%Y/%m/%d)
echo ${date2}
(3)显示一天后的日期
date3=$(date --date='-1 days ago' +%Y/%m/%d)
//或
date3=$(date --date='1 days' +%Y/%m/%d)
echo ${date3}
(4)查看日历
$ cal 12 2020
6. 判断
【1】文档类型的判断
(1)判断某个文件是否存在:test -e filename
或:[-e filename]
(2)判断某个文档是否存在且为档案:test -
f filename
(3)判断某个文件是否存在且为目录:test -d filename
【2】文档权限的判断
(1)判断某个文档是否有可读权限:-r
(2)判断某个文档是否有可写权限:-w
(3)判断某个文档是否有可执行权限:-x
【3】两个整数间的判定
(1)两数值相等:-eq
(2)两数值不等:-ne
(3)n1大于n2:-gt
(4)n1小于n2:-lt
【4】判定字符串的数据
(1)判断字符串是否为0,若为空则true:test -z string
(2)判断字符串是否非0莫若为空则false:test -n string
(3)判断str1是否等于str2,若相等则返回true:test str1=str2
(4)判断str1是否不等于str2,若相等则返回false:test str1!=str2
(5)if判断
if...; then...;
elif...;then...;
else...;
fi
7.循环
【1】for循环
(1)
for var in 1 2 3 4 5
do
echo ${var}
done
(2)
num=10
s=0
for((i=0; i<${num}; i=i+1))
do
s=$((${s}+${i}))
done
【2】while循环
while[condition]
do
程序段落
done
【3】until循环
until[condition]
do
程序段落
done
【4】while read line 从文件或命令中逐行读取
(1)
cat file | while read line
do
echo $line
done
(2)cat 'ls ./*.txt' | while read line
do echo $line
done