在磁盘损坏时,要先输入root密码,再在命令行中输入: fsck /dev/sda2 (发生错误的磁盘)
在fix命令行中输入yes回车
shell的基础编程
Shell:
第一行需要指定哪个程序来编译和执行脚本
#!/bin/bash 或 # ! /bin/sh
除了第一行使用#以外,其他行使用#表示注释行
变量命名:
变量命名必须以字母或下划线开头,后面可以跟字母、数字和下划线。任何其他字符都表示变量名的结束。
变量名关于大小写敏感。
eg :
$ name=xxxxxx
$ x=123
显示变量的值:
$ echo $ {NAME} | $ echo $ NAME
变量分为:本地变量和全局变量
系统的全局变量储存在 /etc/prolife
按照惯例需要大写:
export LANG
环境变量可以被所有shell进程访问,如果父shell进程产生了子shell进程,则环境变量可被“继承”并复制
变量赋值:
两边不能有空格,如果要给变量赋空值,可以在等号后面跟一个换行符。
清除变量:
unset variable
显示所有变量:
set
执行脚本:
$ . test.sh(脚本名)
$ sh test.sh(脚本名)
$ ./test.sh(脚本名)
位置参数:
$n
$0代表命令本身,
1
−
9
代
表
接
受
的
第
1
−
9
个
参
数
,
10
以
上
需
要
用
括
起
来
,
比
如
1-9代表接受的第1-9个参数,10以上需要用{}括起来,比如
1−9代表接受的第1−9个参数,10以上需要用括起来,比如{10}代表接收的第10个参数
$*
代表接收所有的参数,将所有参数看作一个整体
$@
代表接收的所有参数,将每个参数区别对待
$#
代表接收的参数个数
$$
脚本运行的当前进程号
$?
显示前面最后一个命令
返回码:
程序控制的返回码: exit N
退出状态为0,成功无错误
退出状态大于0,失败,某处有错误
数组
$ arr=(zhangsan lisi wangwu)
获取元素:
$ ehco ${arr[0]}
$ ehco ${arr[2]}
$ ehco ${arr[*]}
获取元素个数:
$ echo ${#arr[*]}
改变数组的元素:
$ arr[x]= yyyyyy
date日期的格式化:
$ date +%Y/%m/%d %H:%M:%S
$ date2=${date --date='2 days ago' +%Y/%m/%d %H:%M:%S}
判断:
关于某个档名的【文件类型】判断,如test -e filename 表示是否存在
-e 该【档名】是否存在?
-f 该【档名】是否存在且为档案(file)
-d 该【文件名】是否存在且为目录(directory)
关于档案的权限侦测,如test -r filename 表示可读否(但root权限常有例外)
-r 侦测该档名是否存在且具有【可读】的权限?
-w 侦测该档名是否存在且具有【可写】的权限?
-x 侦测该档名是否存在且具有【可写】的权限?
关于两个整数之间的判定,例如 test n1 -eq n2
-eq 两数值相等
-ne 两数值不等
-gt n1大于n2
-lt n1小于n2
-ge n1大于等于n2
-le n1小于等于n2
判定字符串的数据
test -z string 判断字符串是否为0 ? 若 string 为空字符串,则为true
test -n string 判断字符串是否非为0 ? 若 string 为空字符串,则为false
test str1 = str2 判断str1是否等于str2,若相等,则回传true
test str1 != str2 判断str1是否不等于str2,若相等,则回传false
if判断:
单层判断 多层判断
if [ command ];then
符合该条件执行的语句
elif [ command ];then
符合该条件执行的语句
else
符合该条件执行的语句
fi
for循环:
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
eg:
num=10
s=0
for((i=0;i<${num};i=i+1))
do
s=$( ( ${s}+${i} ) )
done
while do done, until do done(不定循环):
while [condition] <==中括号里面是判断式
do <===循环的开始
程序段落
done <==循环结束
until [condition] <==中括号里面是判断式
do <===循环的开始
程序段落
done <==循环结束
与while相反,条件成立时,停止循环