shell 脚本笔记

shell 脚本笔记

一、shell概述

1.shell是什么
shell是一个命令解释器
shell是人机交互的一个接口
shell是一个功能完备的编程环境(支持变量、数组、顺序 分支和循环三种基本的程序结构)


Windows下的shell:cmd.exe和power shell
Linux下的shell:/etc/shells


常见的shell
bsh csh ksh tcsh bash zsh


Unix:bsh
FreeBSD:csh
Linux:bash


2.shell脚本


windows下的脚本: 批处理文件(.bat) vbscript脚本(.vbs)
linux下的脚本:不要求特定的文件扩展名,通常我们以.sh表示这是一个shell脚本


优点:(通常适合在系统管理中使用)
批处理
自动化


缺点:(在下列场合不宜使用shell脚本)
不能编译,不能生成二进制文件,无法保密
只能进行整数运算,不能进行浮点运算
无法产生GUI(图形化用户接口)界面
在有大量IO的情况下
在有大量运算的情况下(如进行排序等)
在有特点的数据结构(如树、表、链等)的情况下
不能跨平台
……


3.shell脚本的编写格式
要求第一行通常是#!/bin/bash 其作用是指明用来解释后面命令的解释器。其中的#!被称为Magic number(魔术数字)本行被称为shbang line


#!/bin/sh
#!/bin/csh


从第二行开始,以#开头的行表示注释


推荐一种shell脚本的格式:


#!/bin/bash
#first.sh
#mkdir /root/script and touch first.sh in /root/scripe


mkdir /root/script
cd /root/script
touch script




4.shell脚本的执行方法


(1)./first.sh 
(2)sh first.sh 
(3)source first.sh
(4). first.sh(点后有一个空格)


第一种方法用来执行当前目录下的first.sh,也可以使用绝对路径,如/root/first.sh。这种方式必须有执行权限才可以
第二种方法无需执行权限,甚至也不必有shbang line
第三种和第四种是等效的,可以互相替换。通常不用来执行脚本,一般用来更新用户的工作环境,如
# source /etc/profile


# . /home/user1/.bash_profile


二、shell中的输入和输出
通常用echo实现输出,用printf实现有格式化的输出


# echo hello
# echo "hello world"
# echo -e "hello\nworld" (和echo "hello\nworld"的输出进行对比)
# echo -n "hello" (和echo hello的输出进行对比)


通常用read读取键盘上的输入


# read user1
# read user1 user2 user3
# read -p "必要的提示信息" name (-p表示提示)
# read -s -p "your password: " password (-s表示安静的,不会显示用户的输入)
# read -n 1 -p "your choice: " yorn (-n 1 表示只读取一个字符)


三、重定向
标准输入:用0表示,通常指键盘
标准输出:用1表示,通常指显示器
标准错误:用2表示,通常指显示器


上述设备开机后自动使用,是默认的设备


1.输出重定向:
# ls >files.txt  (覆盖)
# ls >>files.exe (追加)


2.输入重定向:
# wc <first.sh
# cat <<EOF
   =======  Welcome To You  =========
     aas bbb
   ==================================
EOF


3.同时使用输入重定向和输出重定向
# cat <file1 >file2 (等于cp file1 file2)


4.错误重定向
# rm abcde.txt 2> err.txt (删除一个不存在的文件,和rm abcde.txt >err进行对比)
# ./first.sh >/root/aaa.txt 2>&1 (把标准输出和标准错误都输出到aaa.txt中)
# ./first.sh &>/root/bbb.txt (和上述命令等效)


5.关于/dev/null
相当于一个只入不出的无底洞


四、管道符
用|表示
# ls /|wc -l
管道左侧命令的输出作为右侧命令的输入


五、变量
1.变量名必须以字母或下划线开头,不允许以数字开头
2.变量赋值时,赋值号左右两侧不允许有空格
3.显示变量时要$var如 # echo $name
4.为避免岐义,最好把变量名有{}括起来,如echo ${a}4
5.三种引号(所有引号必须成对使用)
双引号:
属于弱引用,其中部分特殊字符有其特殊含义
如果有空格,要加上双引号
双引号内的变量,可以用其值代换( # echo "hello $user1")


单引号:
属于强引用,其中的特殊字符除了\、'、(??)外,所有字符原样输出


疑问:希望输出'hello $user1'????


反引号:
反引号里的内容优先执行,然后把执行的结果发送给反引号外面的命令,如
# ls -l `which sh`
上述命令也可以写成
# ls -l $(which sh)
二者等效
6.变量的作用域
局部变量(默认为局部变量)
全局变量(例如export user1=lisi)


六、特殊的shell变量
1.环境变量
使用env可以查看到所有的环境变量
PATH
2.位置变量
# ls /etc /root
$1表示/etc
$2表示 /root


最多允许9个位置变量
特别地$0表示脚本自身的绝对路径
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。、可私 6信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 、可私信6博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值