根据颜色分类
蓝色: 文件夹
绿色: 可执行程序
青色: 快捷方式
橙色: 压缩包
.开头:隐藏文件
命令操作符
*进入*
# cd (文件夹名) -->进入当前文件夹
# cd .. -->返回上一级目录
*创建文件夹*
# mkdir (文件夹名) -->创建文件夹相对路径
# mkdir /root/directory_1 -->创建文件夹绝对路径
# mkidr /root/dir_1/dir_2/dir_3 -->创建多层目录
*创建文件*
# touch 1.txt -->创建空文件
*查看*
# ll -->显示当前目录下所有内容
# ls -->查看前目录下所有的文件名字
# ll / -->显示指定目录下的子文件
# ls / -->显示指定目录下的子文件名
# ll -a -->显示当前目录下所有内容,包括隐藏内容
# ls -a -->查看前目录下所有的文件名字,包括隐藏内容
*删除*
# rm -fr (文件名字) -->强制删除文件,包括子文件
*移动*
# mv 1.txt dir_1 -->把1.txt移动到dir_1文件夹下,如果文件夹不存在则是重命名
*打印*
# echo 内容 -->把内容在命令行打印出来
# echo 你好吗! > 1.txt -->创建文件1.txt,并把指定内容输出到1.txt中
*复制*
# 文件
# cp /root/1.txt /root/dir_1 ->文件夹dir_1存在,把1.txt复制到dir_1下
# cp /root/1.txt /root/dir_1/11.txt ->11.txt不存在,把1.txt复制到11.txt
# 文件夹
# cp /root/dir_1 /root/dir_11 ->dir_11存在,把dir_1复制到dir_11存在下
# cp /root/dir_1 /root/dir_11 ->dir_11不存在,自动创建dir_11复制进去
*压缩
# tar -zcvf ys_1.tar /root/ys_1 ->把ys_1压缩为名为ys_1.tar的压缩包
# tar -zxvf ys_1.tar ->把ys_1.tar解压到当前文件夹
# tar -zxvf ys_1.tar -C /root/dir_3 ->把ys_1.tar解压到dir_3里
*查看
# cat
# cat 1.txt ->查看1.txt的所有文本
# cat -n 1.txt > 2.txt ->把1.txt的内容和行号,写入2.txt中
# tail
# tail 1.txt ->默认查看后10行
# tail -n +3 1.txt ->查看第3行到末尾
# tail -c 20 1.txt ->查看最后20个字符
# tail -f 1.txt ->开启线程,时刻监听1.txt的内容更改
# more
# more 1.txt ->以百分比显示文件的内容,enter键每次多1行,空格键每次多1屏
# more +10 1.txt #从第10行开始显示
# more -10 1.txt #每屏显示10行
# less -Nm 1.txt ->显示行号和文件名
输入:q 退出less
[pagedown]: 向下翻动一页
[pageup]: 向上翻动一页
*其他命令*
# clear ->清屏
# useradd 用户名 ->创建用户
# passwd 用户名 ->修改或者设置用户密码
# su 用户名 ->切换用户
# pwd ->显示当前所在位置
# ifconfig ->查询当前主机的ip
# find 目录 -name 模式->查找子文件
# find aa -name '*1*' ->在aa文件夹下查找名字/目录包含1字符的所有子文件/文件夹
# shutdown -h now ->关机
# reboot ->重启
# echo ->打印字符串,并换行
# echo "HelloWorld" >文件名 ->创建文件并且把内容写入文件
# ps -ef ->显示所有进程
# ps -ef | grep 程序名 ->显示包含指定名的所有进程
# kill -9 pid ->杀死指定pid对应的进程
权限设置:chmod
chmod ug+w,o-w file1.txt file2.txt
chmod a+r file1.txt
chmod ugo+r file1.txt
chmod 777 1.txt
--- u user 当前用户
--- g group 本组的用户
--- o other 其他用户
--- a all 所有用户
--- +w 添加write权限
--- -r 撤销read权限
--- +x 添加执行权限
7 读 + 写 + 执行 rwx 111
6 读 + 写 rw- 110
5 读 + 执行 r-x 101
4 只读 r-- 100
3 写 + 执行 -wx 011
2 只写 -w- 010
1 只执行 --x 001
0 无 --- 000
#d rwx r-x r-x
# 第一个字符为当前元素的类型:d:文件夹 -:文件 l:快捷方式
# 第2到4个字符表示当前用户对当前元素的权限:r为read w为write x为execute
# 第5到7个字符表示当前用户所在组的其他用户的权限,r:读 -:没权限 x:执行
# 第8到10个字符表示和当前用户不是同一个组的其他用户的权限,r:读 -:没权限 x:执行
# 第一个root表示当前元素的所有者
# 第二个root表示当前元素的所有者所在的组
shell编程
if
* 数字运算符
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
* 字符串运算符
= 判断是否相同
!= 判断是否不同
-n 是否为空
* 逻辑运算符
! 取反
-a 与
-o 获
* 执行shell文件
# ./1.sh
# source 1.sh
# /bin/bash 1.sh
* 赋值*
# i=1; =号两边不能有空格
* 输出变量 *
# echo $i; #输出变量i的值,并换行
# printf $i; #输出变量i的值,不换行
* $使用 *
#$i :获取变量i的值
#${i} :获取变量i的值
#$((式子)) :进行数学运算
#$[式子] :进行数学运算
#$(命令) :执行语句 并获取结果
* 通过键盘给变量赋值:read函数 *
# read -p "请输入一个整数:" i;
* 运算 *
# j=$((1+i));echo $j; #通过$((式子))
# j=$[1+i];echo $j; #通过$[式子]
# j=$(expr 1 + 1); echo $j; #有空格才进行运算,且必须是常量
# j=$(expr 1 + $i); echo $j; #$i获取的就是值了
# j=`expr 1 + $i`; echo $j; #列表必须是破折号
# j=$(expr 3 \* 2 ); echo $j; #乘法运算
# j=$(expr 3 / 2 ); echo $j; #除法运算
# j=$(expr 3 % 2 ); echo $j; #求余运算
if判断男女
if [ $sex == "女" ];then echo $sex"是美女!";else echo $sex"是帅哥!";fi;
if判断闰年
# 判断一个年是不是闰年
read -p "请输入一个年份:" n;
if [ $[n % 4] -eq 0 -a $[n % 100] -ne 0 -o $[n % 400] -eq 0 ];
then echo $n"年是闰年";else echo $n"年是平年";fi;
read -p "请输入一个年:" n;
if [ $((n % 4)) -eq 0 -a $((n % 100)) -ne 0 -o $((n%400)) -eq 0 ];then
echo $n"年是闰年";
else
echo $n"年不是闰年";
fi;
if根据分数判断等级
score=67;
if [ $score -lt 60 ];then
echo $score"是不及格";
elif [ $score -lt 70 ];then
echo $score"是及格";
elif [ $score -lt 80 ];then
echo $score"是良好";
else
echo $score"是优秀";
fi;
if判断一个数是不是水仙花
read -p "请输入一个三位数:" n;
# 判断是不是三位数:
if [ $n -ge 100 -a $n -le 999 ];then
echo $n"是三位数!";
#获取各个位数的值
n1=$((n % 10));
n2=$((n / 10 % 10));
n3=$((n /100));
echo $n1":"$n2":"$n3;
sumn=$((n1*n1*n1+n2*n2*n2+n3*n3*n3));
if [ $sumn -eq $n ];then
echo $n"是三位数!是水仙花数!";
else
echo $n"是三位数!不是水仙花数!";
fi;
else
echo $n"不是三位数!";
fi;
case
case根据季节判断月份
jiJie="春";
case $jiJie in
"春")
echo $jiJie"季对应的月份是3,4,5";;
"夏")
echo $jiJie"季对应的月份是6,7,8";;
"秋")
echo $jiJie"季对应的月份是9,10,11";;
"冬")
echo $jiJie"季对应的月份是12,1,2";;
*)
echo $jiJie"请输入春夏秋冬";;
esac;
for
for获取1到10的和
# 获取1到10的和:写法1
sum=0;
for n in {1..10};do
sum=$((sum+n));
done;
echo "获取1到10的和1="$sum;
# 获取1到10的和:写法2
sum=0;
for ((n=1;n<=10;n++));do
sum=$((sum+n));
done;
echo "获取1到10的和2="$sum;
# 获取1到10的和:写法3
sum=0;
for n in $(seq 10);do
sum=$((sum+n));
done;
echo "获取1到10的和3="$sum;
#############################
sum=0;
for n in $(seq 1 10);do
sum=$((sum+n));
done;
echo "获取1到10的和3="$sum;
#############################
sum=0;
for n in $(seq 1 1 10);do
sum=$((sum+n));
done;
echo "获取1到10的和3="$sum;
99乘法表
for ((i=1;i<=9;i++));do
for ((j=1;j<=i;j++));do
printf $i"*"$j"="$((i*j))" ";
if [ $((i*j)) -lt 10 ];then
printf " ";
fi;
done;
echo "";
done;
----------------------------------------------
for ((i=1;i<=9;i++));do
for ((j=9;j>=1;j--));do
if ((j<=i));then
printf $i"*"$j"="$((i*j))" ";
if [ $((i*j)) -lt 10 ];then
printf " ";
fi;
else
printf " ";
fi;
done;
echo "";
done;
获取1到100内质数的和
sum=0;
for ((n=1;n<=100;n++));do
b=1;
for ((m=2;m<n;m++));do
if [ $((n%m)) -eq 0 ];then
b=$((b+1));
break;
fi;
done;
if [ $b -eq 1 -a $n -ne 1 ];then
echo $n"是质数!";
sum=$((sum+n));
fi;
done;
echo "求1到100内质数的和1="$sum;
------------------------------------------------
sum=0;
for ((n=1;n<=100;n++));do
for ((m=2;m<n;m++));do
if [ $((n%m)) -eq 0 ];then
break;
fi;
done;
if [ $m -eq $n ];then
echo $n"是质数!";
sum=$((sum+n));
fi;
done;
echo "求1到100内质数的和2="$sum;
while
求质数
# 使用while获取1到100内位数上含有1的所有质数的平均值
sumn=0;geShu=0;
n=1;
while [ $n -le 100 ]; do
#判断是否含有1
n1=$((n%10));
n2=$((n/10%10));
n3=$((n/100));
if [ $n1 -eq 1 -o $n2 -eq 1 -o $n3 -eq 1 ];then
#判断当前n是不是质数
m=2;
while [ $m -lt $n ];do
if [ $((n%m)) -eq 0 ];then
break;
fi;
m=$((m+1));
done;
if [ $m -eq $n ]; then
sumn=$((sumn+n));
geShu=$((geShu+1));
echo $n"是满足条件的数字!";
fi;
fi;
n=$((n+1));
done;
echo "1到100内位数上含有1的所有质数的平均值="$((sumn/geShu));
#$(echo "scale=2;"$sumn"/"$geShu|bc)通过|bc获取小数部分scale=2保留两位小数
echo $sumn":"$geShu"1到100内位数上含有1的所有质数的平均值="$(echo "scale=2;"$sumn"/"$geShu|bc);
echo $sumn":"$geShu"1到100内位数上含有1的所有质数的平均值="$(echo "scale=2;$sumn/$geShu"|bc);
#获取变量的值$n在字符串中也可以解析
echo "---$n---";
密码输入
# 输入三位数密码 只有5此机会:如果不是123 密码错误
ciShu=0;
m=0;
while [ $ciShu -lt 5 ];do
ciShu=$((ciShu+1));
read -p "请输入一个三位数:" n;
if test $n -eq 123;then
m=$((m+1));
break;
fi;
done;
if [ $m -eq 1 ];then
echo "经过$ciShu后得到正确密码!";
else
echo "输入次数5次了还没有正确!!";
fi;
数组
概念
# 数组:记录多个数据
array1=(1 4 7 9 true "abc" 11.2);
echo '$array1=获取的是下标为0的元素:'$array1;
echo '${array1}=获取的是下标为0的元素:'${array1};
echo '${array1[0]}=获取的是下标为0的元素:'${array1[0]};
echo '${array1[*]}=获取所有元素:'${array1[*]};
echo '${array1[@]}=获取所有元素:'${array1[@]};
echo '${#array1[*]}=获取元素个数:'${#array1[*]};
echo '${#array1[@]}=获取元素个数:'${#array1[@]};
echo '${array1[2]}=获取下标为2的元素:'${array1[2]};
echo '${array1[4]}=获取下标为4的元素:'${array1[4]};
array1[0]=10; #给下标为0的元素赋值
echo '${array1[0]}=获取的是下标为0的元素:'${array1[0]};
获取最大值
arr=(1 3 5 8 9 10 12 2 3 5);
max=${arr[0]};
echo $max;
for ((n=0;n<${#arr[*]};n++));do
if test $max -lt ${arr[n]};then
max=${arr[n]};
fi;
done;
echo ${arr[*]}'的最大值是:'$max
排序
*** 顺序排序 ***
arr=(1 3 5 8 9 10 12 2 3 5);
for ((i=0;i<$((${#arr[*]}-1));i++));do
for ((j=((i+1));j<${#arr[*]};j++));do
if test ${arr[$i]} -gt ${arr[$j]} ;then
k=${arr[$i]};
arr[$i]=${arr[$j]};
arr[$j]=$k;
fi;
done;
done;
echo ${arr[*]};
*** 冒泡排序 ***
arr=(1 3 5 8 9 10 12 2 3 5);#10
for ((i=0;i<$((${#arr[*]}-1));i++));do
for ((j=0;j<${#arr[*]}-i-1;j++));do
#echo ${arr[j]}"和"${arr[$((j+1))]}
if test ${arr[j]} -gt ${arr[$((j+1))]};then
k=${arr[j]};
arr[j]=${arr[$((j+1))]};
arr[$((j+1))]=$k;
fi;
done;
done;
echo ${arr[*]};
函数
函数变量
function test1(){
echo '$0='$0;# 获取执行命令:./function.sh
echo '$*='$*;# 获取所有参数列表:2 3 4 5 6
echo '$@='$@;# 获取所有参数列表:2 3 4 5 6
echo '$#='$#;# 获取参数列表个数:5
echo '$1='$1;# 获取第一个参数: 2
echo '$2='$2;# 获取第二个参数: 3
echo '$$='$$;# 获取进程id
}
test1 2 3 4 5 6;
参数相加
function add(){
sumab=$(($1+$2));
return $sumab;
}
add 10 5;
sum=$?;#获取上一个命令的结果
echo $sum;
遍历获取所有的参数
function hq(){
shu=1;
for i in $*;do
echo '第'$shu'个参数的值是:'$i;
shu=$(($shu+1));
done;
}
hq 2 2 3 5 7 8 9;
判断一个数是不是质数
function pdZS(){
if [ $1 -le 1 ];then
return 1;
fi;
for((i=2;i<$1;i++));do
if [ $(($1%i)) -eq 0 ];then
return 1;
fi;
done;
return 0;
}
for ((n=0;n<10;n++));do
pdZS $n;
result=$?;
if [ $result -eq 0 ];then
echo $n'是质数';
fi;
done;
判断参数年参数月有多少天
function getdays(){
days=0;
year=$1;mouth=$2;
case $month in
4 | 6 | 9 | 11)
days=30;;
2)
if [ $((year%4)) -eq 0 -a $((year%100)) -ne 0 -o $((year%400)) -eq 0 ];then
days=29;
else
days=28;
fi;;
*)
days=31;;
esac;
return $days;
}
for ((year=2020;year<=2030;year++));do
for ((month=1;month<=12;month++));do
getdays $year $month;
echo $year'年'$month'月有'$?'天!';
done;
done;
数学黑洞
function hd(){
x=$1;
ciShu=0;
while [ $x -ne 6174 ];do
ciShu=$(($ciShu+1));
n1=$(($x/1000));
n2=$(($x/100%10));
n3=$(($x/10%10));
n4=$(($x%10));
arr=($n1 $n2 $n3 $n4);
for ((i=0;i<${#arr[*]};i++));do
for ((j=i+1;j<${#arr[*]};j++));do
if test ${arr[$i]} -lt ${arr[$j]};then
k=${arr[$i]};
arr[$i]=${arr[$j]};
arr[$j]=$k;
fi;
done;
done;
big=$((${arr[0]}*1000+${arr[1]}*100+${arr[2]}*10+${arr[3]}));
little=$((${arr[3]}*1000+${arr[2]}*100+${arr[1]}*10+${arr[0]}));
shu=$(($big-$little));
x=$shu;
done;
echo "$1得到6173共执行了$ciShu次!"
}
for ((n=1112;n<=1999;n++));do
hd $n;
done;
斐波那契数列
function shu(){
sa=1;
sb=1;
sn=0;
if [ $1 -eq 1 -o $1 -eq 2 ];then
echo 1;
return 1;
fi;
for ((n=3;n<=$1;n++));do
sn=$(($sa+$sb));
sa=$sb;
sb=$sn;
done;
echo $sn;
return $sn;
}
for ((i=1;i<=20;i++));do
shu $i;
echo "第$i个数为$?!"
done;
--------------------------------------------------
function shu(){
sa=1;
sb=1;
sn=0;
if [ $1 -eq 1 -o $1 -eq 2 ];then
echo "第$i个数为1!"
#return 1;
fi;
for ((n=3;n<=$1;n++));do
sn=$(($sa+$sb));
sa=$sb;
sb=$sn;
done;
if [ $1 -gt 2 ]; then
echo "第$1个数为$sn!"
fi;
}
for ((i=1;i<=20;i++));do
shu $i;
done;