Shell编程-初级语法

官方文档
https://www.gnu.org/software/bash/manual/bash.html

  1. 什么是Shell编程

    • Shell是linux系统的用户界面,提供了用户与内核的一种接口。
    • Shell是C语言程序编写的。C语言及是命令语言,也是程序的设计语言。
    • Linux本身没有图形化界面,所有任务都是通过命令来完成的。
  2. 在Linux系统中

  • /bin/sh 软连接集 指向 /bin/bash工具
  1. 重定向
    文件描述符
文件描述符0: 标准输入	/dev/stdin
文件描述符1: 标准输出	/dev/stdout
文件描述符2: 标准输出错误  /dev/stderr
# 单行注释
:<<!#
	多行注释
 !
ls -l > irohane.txt
#把ls 命令输出的消息保存到 irohane.txt文件中,以覆盖的方式保存

ps >> irohane.txt
#将ps 输出附加到文件的尾部

kill 123  1>hello.txt 2>>error.txt
#杀掉pid 123的进程 将输出信息保存到hello.txt中 然后 将错误输出到error.txt中
kill 123  &>hello.txt
# 也可以使用&> 将标准和错误输出到hello.txt中

# 重定向输入
more < hello.txt
#把hello.txt的内容输入到more程序

  1. 管道
    在shell 中可以通过管道操作符 | 连接进程
    不同进程间传递数据
ps>psout.txt
sort psout.txt > psout.txt
#利用管道符更加简单的完成功能
ps | sort > psout.txt
  1. shell 脚本

创建一个脚本main.sh

#! /bin/sh
#表注释
#第一行表示指明系统用什么解释器执行代码
echo "helloworld"
exit 0	#程序结束返回0表正常

变量类型

类型范围
局部变量只在当前的Shell中生效,使用local修饰
全局变量默认都是全局变量
环境变量所有程序,包括Shell启动程序,都能访问($PATH)
特殊变量Shell变是由Shell程序设置的特殊变量
#!!!注意
(☆▽☆)
1. 变量名和等号之间不能有空格
2. 不要跟系统已有的环境变量重名
3. 只能含字母,数字和下划线,不能以数字开头
4. 不能使用关键字
#变量使用
var_name="helloworld"	#默认都是全局变量
local name="helloworld" #局部变量,通常在函数中使用
echo $var_name	#变量访问前要加$
echo ${var_name}#数组的方式需要使用这一种
echo $PATH		
----------------单引号/双引号
var_show='helloworld'
var_msg="helloworld"

name="xiaobai";
a='$name' //单引号不会转义,也不会使用变量
b="$name" //双引号可以转义,也可以使用变量
#结果
a-> $name
b-> xiaobai

----------------字符串操作
#字符串拼接
var_name="小明";
var_msg="hello${var_name}";
echo $var_msg;

#字符串长度
	#在字符串前面表示取字符串长度
string="hello";
echo ${#string};  //返回5

#字符串查找
search_string="hello,xiaobai";
echo `expr index "$search_string" x` //返回7  `ESC下面那个 注意空格

---------Shell数组
定义:变量名=(值1 值2 值3 值4 ......) //使用空格隔开
	 变量名=([0]=值1 [1]=值2)
赋值
	array_name[0]=value0;
	array_name[1]=value1;
	array_name[n]=valuen;
访问
	valuen=${array_name[n]};
	#@/*用于 获取所有元素
	echo ${array_name[@]};
	echo ${array_name[*]};
	#获取数组长度
	echo ${#array_name[*]};

添加
	array_name[$(#array_name[*])]=99; //在最后添加元素 -!添加元素数组下标必须是连续的
追加
	array_name+=(${array_name[*]},100,200,300})
	
参数变量:
运行脚本时带有参数,一些而外的变量会被创建,这些变量可以通过$n 来获取
hello.sh  参数1 参数2
hello.sh xiaobai xiaohei	//xiaobai xiaohei 


特殊字符

参数处理说明
$#传递到脚本的参数个数
$*将参数变为一个字符串的形式显示出来
$$脚本运行当前的ID号
$!后台运行最后一个进程的ID号
$@和$*相同,使用时加引号,并在引号中返回参数
$-显示Shell使用的当前选项
$?显示最后命令退出的状态,0表示没有错误,其他值表示有错误
$HOME当前用户的家目录
$PATH以冒号分隔用来搜索目录列表
$USER当前用户名称

hello.sh

#!/bin/sh

#获取全部参数
echo $*
echo $@
#获取参数个数
echo $#
#获取第n个参数
echo $3
#s0 shell脚本名称
echo $0
#$?	退出码
echo $?	//运行之后返回当前状态码

运行
./hello.sh 参数1 参数2

Set命令
Set可以设置环境变量

export TEST="hello";
set TEST="hello";

输入命令:
read name	#读取用户输入以回车结束
echo "$name test"

输出命令:
输出到控制台上可以通过echo,printf(带格式)
\# - 表示左对齐 10表示占10个字符,s表示字符串
printf "%-10s %-8s %-8s\n" 名字 姓名 编号



算数运算

Bash中支持三种算数方式
expr命令计算
val=`expr 2+2`	#也可以写成$(expr 2 + 2 )
let运算-用于执行一个或者多个表达式,变量计算中不需要加上 $ 来表示变量。
let a=5+4; let 计算中不允许有空格
执行ls 命令后显示结果`ls`
echo `ls`
echo $(ls)
使用$(())来计算算数运算
Number1=$((5+5))		//= - % * 都可以		!*注意做转义



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值