linux shell 基本知识

            shell 百度百科解释:

                   在计算机科学中,Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器);它接收用户命令,然后调用相应的应用程序。同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

        Shell分为两种,图像界面shell,比如Windows操作系统界面;命令行shell,比如windows cmd.exe、linux 中的bash/sh等;我介绍一下bash shell的基本语法和脚本使用。

1.运行可执行文件:
a. ./可执行文件名.sh
指定当前路径下,不然系统会去PATH路径下搜索指定的可执行文件;
b. /bin/sh 可执行文件.sh
直接运行解释器,要执行的程序作为参数
2.#! 告诉系统其后路径所指定的程序即是解释此脚本文件的shell程序;
3.shell 变量
变量操作:
声明变量:
your_name='runoob.com'
使用变量:
$your_name
${your_name}
已定义的变量可以重复定义
只读变量:使用readonly可以将变量定义为只读变量,其值不可以改变;
readonly myUrl
删除变量
unset variable_name
4.变量类型:
运行shell时,有三种变量:
局部变量
环境变量
shell变量
Shell字符串
str=this is a String
str='this is a String'
str="this is a String"
注:单引号内的任何字符都是原样输出的
双引号中可以使用变量和转义字符
拼接字符串
获取字符串长度
提取子字符串
#!/bin/bash
for skill in java javascript;do
echo "I am good at ${skill}!"
done

myUrl="www.baidu.com"
echo $myUrl
myUrl="www.sina.com"
echo $myUrl
readonly myUrl
#myUrl="www.sohu.com"

youname="majq"
greeting="hello,${youname}"
greeting_1="hello,"${youname}"!"
echo $greeting $greeting_1
echo ${#greeting}
echo ${greeting:0:4}
echo `expr index "${greeting}" majq`
数组
shell只支持一维数组,不限制数组大小,小标从0开始,下表可以是表达式,其值应该大于或者等于0
定义数组
获取数组元素
获取数组长度
5.shell传递参数
可以向shell脚本传递参数,脚本内获取参数的格式:$n,n代从1开始,代表参数的顺序;
此外,还有几个特殊字符来处理参数:
$# 传递到脚本的参数个数
$* 以一个单字符串显式所有的参数
$$ 脚本运行的当前进程id号
$! 后台运行的最后一个进程ID号
$@ 与$相同,使用时要加引号,并在引号中返回每个参数
$- 显式shelll使用的当前选项,set命令相同
$? 显式最后命令的退出状态,0:没有错误,其他表示异常。
6.shell运算符
算数运算:+-*/% == !=
原生bash不支持算数运算,需要使用expr实现
关系运算
-eq 是否相等
-ne 是否不相等
-gt 是否大于
-lt 是否小于
-ge 是否大于等于
-le 是否小于等于
布尔运算
! 非运算
-o 或运算
-a 与运算
逻辑运算符
&& 逻辑AND
|| 逻辑OR
字符串运算符
= 检测两个字符串是否相等
!= 检测两个字符串是否不相等
-z 检测字符串长度是否为0
-n 检测字符串长度是否不为0
str 检测字符串是否为空
文件测试运算符
-b file
-c file
-d file
-f file
-g file
-p file
-u file
-r file
-w file
-x file
-s file
-e file

7.echo命令
显式换行 \n
显式不换行 \c
显式结果重定向到文件 > filename
显式执行结果 echo `date`
8.printf命令
支持输出格式化和转义字符,不自动换行,需要加入/n
命令格式 printf formatString [arguments...]
9.test命令
检查某个条件是否成立,可以用于数值,字符和文件三方面的测试
10.流程控制
流程控制不可为空
if elseif else
if condition
then
command
else if condition2
command2
else
command3
fi
for
for var in item1 item2 ... itemN
do
conmmand
done
while
while condition
do
conmmand
done
注:Bash let命令,用于执行一个或多个表达式,变量计算不需要加上$
无限循环
until循环
执行一系列命令直到条件为true为止
until condition
do
command
done
case
case 值 in
模式1)
commad1
;;
模式2)
command2
;;
...
esac
跳出循环
break
continue
11.shell函数
[ function ] functionname [()]
{
action;
[retrun int;]
}
1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
3.函数返回值在调用函数后用$?获取。
4.所有函数在使用前必须先定义。
5.如果需要向函数传递参数,则在函数内使用$n获取,n为从1开始的整数,表示参数次序;
6.对于函数获取参数符号与脚本获取参数符号一致
12.输入/输出重定向
命令
说明
command > file
将输出重定向到 file。
command < file
将输入重定向到 file。
command >> file
将输出以追加的方式重定向到 file。
n > file
将文件描述符为 n 的文件重定向到 file。
n >> file
将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m
将输出文件 m 和 n 合并。
n <& m
将输入文件 m 和 n 合并。
<< tag
将开始标记 tag 和结束标记 tag 之间的内容作为输入。

注:who命令 显式当前用户信息
wc -l 文件名 统计文件内容的行数
输出重定向:command > file1
输入重定向: command < file2
同时重定向输入和输出:command1 < infile > outfile
重定向深入:
一般情况下,每个Linux命令运行时都会打开三个文件:
标准输入文件(stdin):文件描述符为0,默认从stdin读取数据
标准输出文件(stdout):文件描述符为1,默认从stdout读取数据
标准错误文件(stderr):文件描述符为2,默认会向stderr中写入错误信息;
所以,将标准输入、标准输出、标准错误重定向时可以使用相应的文件描述符。
将stderr重定向到file : command 2 >> file
将stdout与stderr合并后重定向到file: command >> file 2>&1
将stdin和stdout都重定向: command < file1 > file2
Here Document 用来将输入重定向到一个交互式Shell脚本或程序:
基本形式如下:
command << delimiter
document
delimiter
它的作用是将两个delimiter之间的内容——document作为输入传递给command
注意:
结尾的delimiter 一定要顶格写,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 缩进。
开始的delimiter前后的空格会被忽略掉。
/dev/null文件
如果希望执行某个命令,又不希望在屏幕显式输出结果,可以将输出重定向到/dev/null,实现禁止输出的效果;
此文件写入的内容都会被丢弃,也无法从此文件中读取任何信息;
13.文件包含
Shell文件包含的语法格式如下:
. filename # 注意点号(.)和文件名中间有一空格
或者
source filename
关于source命令与(.)命令
source filepath
source命令 是bash shell内置指令,使当前shell读入路径为filepath的shell文件并依次执行文件中的所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必重新登录;
. filepath
. 是source命令的别名;
sh filepath 与 ./filepath
当shell脚本具有执行权限时,sh filepath与./filepath没有区别,./filepath只是指定PATH,.表示当前目录
sh filepath会建立子shell,子shell会继承父shell的环境变量,其改变的变量不会带入父shell,除非使用export
source filepath 不会建立子shell,其改变的变量会保存在当前shell中。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值