shell基本知识

来源:互联网 发布:中国单片机公共实验室 编辑:程序博客网 时间:2024/06/05 08:41

shell类型

函数

主过程

要调用才能执行


<<!

....

...

...

!

多行注释

#或//单行注释

#!/bin/bash


echo "abcdefg........"


syshello


syshello()
{
    echo "enter function....."
    ls -l
    echo "over  function....."
}


echo "start......."




syshello


echo "exit......"

1、文本编辑:
gedit (图形界面可以用)
vi  vim


vim 文件名  (文件存在,打开文件  文件不存在:创建文件(文件非空))


退出: shift+:
1、q  退出 不保存退出
2、q! 强制退出   不保存
3、w  保存文件内容
4、wq 保存退出    ====   x


vim 三种模式:
1、命令行模式:刚开打的状态
2、底行模式:输命令的状态
3、插入模式(编辑模式):可以编辑文件


命令行 --->   底行: shift + :
底行   --->   ESC键
命令行 --->   插入行:
i(I) : 在光标的前面插入   insert   I: 在一行的开头进行插入
a(A) : 在光标的后面插入   append   A: 在一行的结束进行插入
o(O) : 在下面另起一行              O: 在上面另起一行


插入行 --->   命令行:ESC键


底行模式:
设置行号显示:set nu(number)
取消行号显示:set nonu
语法高亮:    syntax on(开启)  syntax off(关闭)
vim 的配置文件 /etc/vimrc








命令行与底行模式
跳转:
G    跳到最后一行
gg   跳到第一行
nG   跳到 n 行


复制:
yy   复制当前行数据
yw   复制一个单词
y$   复制光标位置 到 这一行最后的所有数据


删除:
dd   删除一行
dw   删除一个单词
d$   删除光标位置开始后面所有数据
D    同上
x    删除一个字符   delete


粘贴:
p




n+(yy,yw,dd,p) 重复多少次


撤销: u


底行模式:
查找:
向下查找:/ + 查找的内容   /define  n 下一个  N 上一个
向上查找:?+ 查找内容     ?define


替换:
s/old/new     : 当前行替换,替换当前行的第一个
s/old/new/g   : 整行替换
%s/old/new/g  : 全文替换
n,ms/old/new  : 替换 n 到 m 行数据


s/old/new/gc  : 替换前提示




r ; 替换一个字符
R : 替换后面的所有


另存为:w filename   






1、shell:
打开一个文件,后缀名 sh;
写:文件第一行写: #!/bin/bash 表明所用的脚本类型 
赋予可执行的权限  chmod +x 
执行:
1、./文件
2、sh   文件
3、bash 文件






if 条件
then
    执行语句1
elif
then
执行语句2
else
执行语句3

fi  结束标志


grep
ls -l | grep root


awk
ls -l | awk '{print $1}'
ls -l | awk -Froot '{print $1}'
ls -l | awk -Froot '{print $NF}'

第一行写#!/bin/bash,表明所有脚本类型

打开一个文件,后缀名.sh

bin目录下可以直接执行

usr/bin普通用户用

执行:

1. ./ 文件

2. sh 文件

3. bash 文件

清除变量unset 变量 终端关掉结束

#环境内部定义的局部变量

复制等号左右不能空格,字符串,取值包含空格,用双引号

环境变量那里都能用,一个终端内,read 变量名(键盘输入)

readonly 变量名,无法改变此值

PATH=$PATH:/home

etc 改,全终端有效

name=hhh

echo $name

export name 导成环境变量 次派生出来终端才有效

env所有环境变量

#!/bin/bash


echo "#:$#"


echo "@:$@"


echo "*:$*"


echo "0:$0"
echo "1:$1"
echo "2:$2"
echo "3:$3"
echo "4:$4"




echo "hello"

#!/bin/bash


num1=$1


operate=$2


num2=$3


result=$((num1 $operate num2))


echo $result

$?上一个命令的执行结果,

echo $? 正确0

错误非0,错误代码


expr 7+9  

expr 7\*9  *命令行参数,需要转义,读不用

echo $((表达式))这里乘法不需要转义

$((num1 * num2))

.demo7.sh 4 + 5

条件test tset n1 参数 n2

成功执行,真 返回0

错误,返回1

if条件

then 执行语句

fi

(结束标志)

elif 条件

then 执行语句

else

执行语句

数值测试

-eq 等于则为真

-ne 不等于

-gt 大于

-ge 大于等于

-lt小于

-le小于等于

路口参数检查

#!/bin/bash


<< A
if test $# -ne 3
then
    echo "Usge:./demo9.sh num1 operate num2"
    exit 1
fi
A


if [ $# -ne 3 ]
then
    echo "Usge:./demo9.sh num1 operate num2"
    exit 1
fi
    


num1=$1


operate=$2


num2=$3


result=$((num1 $operate num2))

case “$#” in
   0) echo “输入了0个参数” ;;
   1) echo “输入了1个参数” ;;
   *) echo “输入了多个参数”;; 
esac
每个分支条件后必须以两个分号结尾
echo $result

文件测试

while条件为真执行

until条件为假才执行

tiem命令 执行时间

管道| 管道自负

date 时间

date +%k小时

cp /etc/my.conf  >/dev/null  2>&1
/dev/null  空设备
此句命令的结果是:
cp命令没有目标文件,应该输出错误。 
2>&1表示错误重定向指向标准输出。
>/dev/null又使标准输出重定向到空,就是不要输出信息
即:一个错误的命令执行,什么功能都不实现,且没有任何信息或错误提示输出。
 
1)command >file 2>file
2)command >file 2>&1 
有什么区别? 
    1)的写法,stdout和stderr都直接送到file中, 会出现两个同抢占file的管道,file会被打开两次,stdout和stderr输出的信息会互相覆盖。
    2)的写法将stdout直接送向file, stderr继承1的管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。
    从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,常用command > file 2>&1 这样的写法。 

编写一个名为chname的程序,将当前目录下所有的.txt文件更名为.doc文件。


 #! /bin/sh -
for file in *.txt
do
  leftname=`basename $file .txt`
  mv $file $leftname.doc
done
说明:
 (1)在Linux系统中不支持mv *.txt *.doc这样的更名命令形式,如果需要将文件成批地更名最好编写一个shell脚本文件。
 (2)在for语句的参数列表中使用了“*”通配符。
 (3(在程序中用到basename命令,该命令从随后的文件名剥去指定的后缀。


 

原创粉丝点击