其他分享
首页 > 其他分享> > 2021-06-28

2021-06-28

作者:互联网

Linux 常用指令

简单指令

who
who i am
echo ‘hello world’
date 
cal 2021
cal 7 2021
clear
passwd

文件操作命令

文件显示

 	cat a.java

匹配命令

	grep heng /etc/passwd #在/etc/passwd中查找包含heng的所有行
	find . -name “*.py” #在当前目录下查找所有以.py结尾的文件
find

复制、删除和移动文件的命令

	cp a.java /home/heng/javaFiles
	cp -r /home/heng/javaFiles /home/heng

	rm -r * #删除当前目录下除隐含文件以外的所有文件
 	rm -d /home/heng/empty #删除空文件夹

	mv a.java b.java #rename
	mv b.java ..

创建目录、显示目录内容

mkdir heng #创建名为heng的文件夹
ls #显示当前文件夹目录下的所有文件
ls heng #显示heng文件夹下的所有文件
ls -a heng #显示heng目录下的所有文件,包括隐藏文件夹

chmod命令

ugoa:
u 用户—文件/目录拥有者。user
g 同组用户,与拥有者属于同一个用户组下的用户 group
o 其他用户 others
a 所有用户 all —系统默认值
+添加
-取消
=将文件权限改变为等号后的状态
r 可读
w 可写
x 可执行

chmod key filename #一会分开讲

chmod a+x a.sh. #让a.sh所有人都可以执行
chmod u+rwx,g+rx,a+r a.sh#所用用户都可读该文件,同一组下的用户还可以执行该文件 该用户可读写执行该文件
chmod a-x b.sh #所有用户均不可执行b.sh
chmod a=rw,g=rw,u=rwx a.sh#自己分析

进程

	ps #显示所有进程状态
	ps -e #
	ps -a #这两个都是显示所有进程的信息
	ps -f #显示进程的所有信息
	ps -ef #显示所有进程的全部信息
	ps aux #显示所有终端上所有用户的有关进程的所有信息

Linux shell程序设计

简单的shell示例

#!/bin/bash
#If no arguments , then listing the current directory 
#Otherwise ,listing each subdirectory
if test $# = 0
	then ls .
else
	for i
	do
		ls -l $i | grep ‘^d’
	done
fi

案例当中
$# 表示命令行参数个数
若无传人参数,就ls .输出当前文件夹下文件
否则就会执行以下操作
补充两点

  1. 如何传参
    bash a.sh 第一个参数 第二个参数 第三个参数 ... 第n个参数
  2. 参数如何获取
    $1 $2 ... $9 ${10}

for 变量 是与for 变量 in $* 等价的

也就是说
对于传入的每一个参数,都输出该路径下的所有子目录
ls -l $i的结果首位为d的行,指代的一定是一个目录 (可以自己动手试试)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XxLdWtK3-1624858823956)(Linux%20%E5%B8%B8%E7%94%A8%E6%8C%87%E4%BB%A4/%E7%85%A7%E7%89%87%202021%E5%B9%B46%E6%9C%8826%E6%97%A5%20%E4%B8%8B%E5%8D%8811834.jpg)]

变量引用

${name[*]}${name[@]}

for i in "${person[*]}"
do 
	echo $i
done
for i in "${person[@]}"
do 
	echo $i
done

结果就是
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P2JcPGaN-1624858823958)(Linux%20%E5%B8%B8%E7%94%A8%E6%8C%87%E4%BB%A4/%E7%85%A7%E7%89%87%202021%E5%B9%B46%E6%9C%8826%E6%97%A5%20%E4%B8%8B%E5%8D%8812144.jpg)]

注意双引号不能省
${name[*]}拓展成一个字符串 ${name[@]}拓展成多个词

${name#pattern}${name##pattern}
两者均为用正则表达式匹配变量字符串中的开头
前者为贪婪模式,后者为懒惰模式

${name%pattern}${name%%pattern}
两者均为用正则表达式匹配变量字符串中的匹配
前者为贪婪模式,后者为懒惰模式

环境变量

  1. $HOME
    用户主目录的全名
    $HOME == _home_heng
  2. $LOGNAME
    $LOGNAME == heng
  3. $MAIL
    $MAIL == _var_spool_mail_heng
  4. $PATH
    PATH中的字符串顺序决定了从哪个目录查找
  5. $PS1
    shell主提示符
  6. $PWD
    当前工作目录的路径
  7. $SHELL
    指出当前shell指示程序存放在哪
  8. $TERM
    终端类型

for语句

打印n行*,第k行打印k个,n由用户在命令行决定

for ((i=1;i<=$1;i++))
do
	for((j=1;j<=i;j++))
	do
		echo -n "*"
	done
	echo ""
done
	echo "end"

break 语句

反向输出传入的参数

count=$#
cmd=echo
while true
do
        cmd="$cmd \$$count" #巧妙的递归方式
        ((count=count - 1)) #赋值语句
        if [ $count -eq 0 ]
        then break
        fi
done
eval $cmd

eval —能够将后面的参数用值替换 后将替换过的语句放在命令行中调用

select break二合一示例

输入选项,执行相应语句

PS3="Choice?"
select choice in query add delete update list exit
do
	case "$choice" in
		query) 
			echo "call query routine"
			break;;
		add) 
			echo "call add routine"
			break;;
		update)
			echo "call update routine"
			break;;
		list)
			echo "call list routine"
			break;;
		exit)
			echo "call exit routine"
			break;;
			
	esac

	echo "your choice is $choice"
done

注:case中,每一个分支以模式)开头;;结尾

习题四

4.8

  1. 分析下列shell脚本功能
count=$#
come=echo
while [ $count -gt 0 ]
do
	cmd=“$cmd  \$$count”
	count=`expr $count - 1`
eval $cmd 

在应在答案:反向输出传入的参数

  1. 利用for循环将当前目录下的.c文件移到指定目录下,并按照文件大小排序,显示移动后指定目录的内容
#!/bin/bash
  
echo 'input a directory'
read dir

if [ -d $dir ]
then
        for name in `ls . | grep -E '.*(.c)$'`
        do
                mv $name $dir
        done
        ls -S $dir
else
        echo 'what just input is not a directory'
fi
  1. 编写一个shell脚本,求前十项斐波那契数列及其总和
#!/bin/bash
  
let a=1
let b=1
echo -n -e "$a\t$b"
let n=a+b
let count=4
while [ $count -gt 0 ]
do
        let a=a+b
        let b=b+a
        echo -n -e "\t$a\t$b"
        let n+=a+b
        let count=count-1
done
echo
echo "the sum is $n"
  1. 设计一个程序cuts,由标准输入读取数据,获取由第一个参数n和第二个参数m所限定范围内的数据,n和m都是整数,即从输入的字符串中抽取第n个字符至第m个字符之间所有字符(包括这两个字符)
#!/bin/bash
echo "input a string:"
read str
echo $str | cut -c $1-$2

标签:count,文件,06,name,heng,28,echo,2021,ls
来源: https://blog.csdn.net/hengpro/article/details/118301494