linux学习day04(shell学习)
Posted 风中凌乱的猪头
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux学习day04(shell学习)相关的知识,希望对你有一定的参考价值。
- shell是一个命令执行器,作用是遵循一定的语法将输入的命令加以解释并传给系统,用户可以用shell来启动、挂起、停止甚至是编写一些程序。shell是用户和linux的桥梁,定义了各种变量和参数,并提供了很多在高阶语言中才具有的控制结构,包括循环和分支,虽然他不是内核的一部分,但是她调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行
- 本质上,shell就是命令行命令简单的组合到一个文件里面。
- 程序基础
- 必须在文件的第一行加 !#/bin/sh 告诉系统他后面的参数用来该文件的执行
- chmod +x filename,因为vim编辑过的文件并没有可执行的功能
- 变量
- 变量名=值 取变量值($)注意变量赋值时,=两边不能有空格,且所有结束语句都不用加分号
- 当num=2 $numnd 打印不了时,可以$numnd来打印
- 默认变量
- $#:传入脚本的命令行参数个数(和c的区别,c的个数包括命令本身)
- $*:所有命令行参数值,在各个参数值间留有空格
- $0;命令本身
- $1:第一个命令行参数
- $2:第二个命令行参数
- 局部变量 在变量前加local(和C差不多)
- if 格式,
- -eq:相同
- -ne:不同
- -gt:大于
- -lt:小于
- -ge:大于或等于
- -le:小于或小于
- -z:为空
- -n:不为空
-
#!/bin/bash a=$1 b=$2 if [ -z $a ] || [ -z $b ] then echo "please enter 2 no" exit 1 fi if [ $a -eq $b ] ; then echo "number a = number b" else if [ $a -gt $b ] then echo "number a>number b" elif [ $a -lt $b ] then echo "number a<number b" fi fi
- -e 文件已存在 ;-f文件是普通文件 ;-s文件大小不为0 ;-d文件是一个目录 ;-r文件对当前用户可以读取;-w文件对当前用户可以写入 ;-x文件对当前用户可以执行
-
#!/bin/sh folder=/home [ -r "$folder" ] && echo "Can read $folder" [ -f "$folder" ] || echo "this is not file"
-
- for
-
#!/bin/bash for day in Sun Mon Tue Wed Thu Fri Sat do echo $day done
统计当前目录下的文件数
-
#!/bin/bash counter=0 for files in * do counter=`expr $counter + 1` done echo "There are $counter files in `pwd` we need to process"
-
- while
- 将用户输入的数字按倒叙方式输出
#!/bin/bash echo -n "Pleasw enter number : " read n sd=0 rev="" on=$n echo "$n" while [ $n -gt 0 ] do sd=$(( $n % 10 )) # get Remainder n=$(( $n / 10 )) # get next digit rev=$( echo $rev$sd) done echo "$on in a reverse order $rev"
- 将用户输入的数字按倒叙方式输出
- until
- 移动一个文件,如果目标位置存在文件,则监视该文件,直到文件被删除后才移动该文件
#!/bin/bash if [ "$1" = "" ] || [ "$2" = "" ] then echo "Please enter file name" exit 1 fi if [ -e $2 ] then echo "The file already exists" until [ ! -f $2 ] do sleep 1 done fi if [ ! `mv $1 $2` ] then echo "mv sucessful" else echo "mv error" fi
- 移动一个文件,如果目标位置存在文件,则监视该文件,直到文件被删除后才移动该文件
- case
-
#!/bin/bash echo "Hit a key, then hit return." read Keypress case "$Keypress" in [A-Z] ) echo "Uppercase letter";; [a-z] ) echo "Lowercase letter";; [0-9] ) echo "Digit";; * ) echo "Punctuation, whitespace, or other";; esac
-
linux 学习随笔-shell基础知识
1:用户的shell历史命令保存在home/username/.bash_history中
#!!
执行用户的上一条命令
#!pw
执行命令历史中最近一次以pw开头的命令
2:‘*‘来匹配零或多个字符
‘?’匹配一个字符
#ls -d Day* 列出Day开头,后面匹配所有字符的目录
#ls -d Day? 列出Day开头,后面匹配一个字符的目录
3:>> 在文件中追加重定向
> 在文件中重定向
4:| 管道符
#cat /etc/passwd|wc -l
cat /etc/passwd指令的输出作为wc命令的输入。即统计passwd的行数
5 ctrl+z 命令可以暂停一个任务
#jobs 可以查看暂停的任务 如下所示:
(my-env) [[email protected] linux_learn]$ jobs
[1]+ Stopped vim test1.txt
#fg +id 号可以恢复运行
#bg +id 号可以将此任务放在后台运行
#ps aux |grep test1 可以查看在后台运行进程的pid
#kill -9 pid 可以结束此进程
6 $PATH
PATH当输入命令的时候LINUX会去查找PATH里面记录的路径。
比如在根目录/下可以输入命令ls,在/usr目录下也可以输入ls,但其实ls这个命令根本不在这个两个目录下。
事实上当你输入命令的时候LINUX会去/bin,/usr/bin,/sbin等目录下面去找你此时输入的命令,
而PATH的值恰恰就是/bin:/sbin:/usr/bin:
其中的冒号使目录与目录之间隔开。
7 set命令可以显示系统预设的变量 比如PATH HOME等,也就可以显示用户自己定义的变量
#myname=Aming 设置自定义变量
#set |grep myname
myname=Aming
可以查看到自己定义的变量
#bash 进入另一个shell中
#set |grep myname 查看不到我们定义的变量,定义的变量只在定义的那个shell中存在
7.1 让定义的变量在所有用户中都能使用
#sudo vim /etc/profile
添加export myname=Aming
#source /etc/profile 生效
7.2 让定义的变量在所有子shell中生效
#abc=123
#export abc
7.3 取消变量 unset
#unset abc
#unset myname
8 wc 命令
# wc /etc/passwd -l 统计行数
# wc /etc/passwd -m 统计字符数
# wc /etc/passwd -w 统计词数
9 ~表示用户的home目录
root在/root下
普通用户在 /home/username下
10 2> 表示将错误重定向
2>> 表示错误追加重定向
#ls aaaa 2> /tmp/error
#ls aaaa 2>> /tmp/error
可以在error中查看错误
以上是关于linux学习day04(shell学习)的主要内容,如果未能解决你的问题,请参考以下文章
Python全栈100天学习笔记Day35 Linux系统软件安装Shell编程及配置服务工具