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 .
输出当前文件夹下文件
否则就会执行以下操作
补充两点
- 如何传参
bash a.sh 第一个参数 第二个参数 第三个参数 ... 第n个参数
- 参数如何获取
$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}
两者均为用正则表达式匹配变量字符串中的匹配
前者为贪婪模式,后者为懒惰模式
环境变量
- $HOME
用户主目录的全名
$HOME == _home_heng - $LOGNAME
$LOGNAME == heng - $MAIL
$MAIL == _var_spool_mail_heng - $PATH
PATH中的字符串顺序决定了从哪个目录查找 - $PS1
shell主提示符 - $PWD
当前工作目录的路径 - $SHELL
指出当前shell指示程序存放在哪 - $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
- 分析下列shell脚本功能
count=$#
come=echo
while [ $count -gt 0 ]
do
cmd=“$cmd \$$count”
count=`expr $count - 1`
eval $cmd
在应在答案:反向输出传入的参数
- 利用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
- 编写一个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"
- 设计一个程序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