Linux基本命令

根据颜色分类

蓝色: 文件夹
绿色: 可执行程序
青色: 快捷方式
橙色: 压缩包
.开头:隐藏文件

命令操作符

*进入*
    # 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;
posted @ 2021-12-25 21:32  RenVei  阅读(74)  评论(0编辑  收藏  举报