Shell 编程快速入门
日期: 2018-11-08 分类: 个人收藏 359次阅读
shell简介
- 什么是shell编程?
- 将终端下编写的命令等保存到文件中,就称为shell编程。
- shell类型?
- ash、bash、csh、ksh
- 查看系统shell解析器:
echo $SHELL
- 当前系统可以shell解析器:
/etc/shells
文件
- shell脚本的执行
- 指定shell解析器执行指定脚本:
bash hello.sh
,不需要添加可执行权限 - 将shell脚本作为可执行文件执行,必须添加可执行权限
- 添加可执行权限:
sudo chmod +x world.sh
- 在脚本开头指定shell解析器:
#! /bin/bash
,其他位置的#表示注释 - 执行脚本:
- 在当前目录:
./world.sh
- 不在当前目录:
/home/jerry/shell/world.sh
- 在当前目录:
- 添加可执行权限:
- 指定shell解析器执行指定脚本:
shell变量
- 变量定义:
name='dahua'
,’='两边不能有空格 - 打印变量:
echo $name 或 echo ${name}
- 销毁变量:
unset name
,之后就不能再使用 - 声明常量:
readonly name='dahua'
- 使用说明:’='两边不能有空格,只读变量不能修改
变量分类
- 本地变量:只适用于当前shell的变量
- 环境变量:适用于整个系统,通常都是纯大写的
- 查看系统环境变量:
env
- 查看指定环境变量:
echo $PATH
- 若想在任意位置都可执行指定程序,可以将程序所在的路径添加到环境变量PATH。
- 修改:
- 单次:
export PATH=$PATH:/home/jerry/shell
- 永久:
- 系统:
/etc/profile
- 用户:
~/.profile、~/.bashrc、~/.bash_profile
- 把导出的语句添加到文件末尾即可
- 使文件生效:重启终端 或
source ~/.bashrc
- 系统:
- 单次:
- 查看系统环境变量:
- 位置变量:
- $0:执行脚本的名字
$1 ~ $9
:传递给脚本的参数
- 特殊变量:
- $#:传递给脚本的参数个数
- $*:传递给脚本的所有参数
- $?:上次命令的执行情况,0表示正确,其他表示错误
字符串类型
-
单引号:其中的字符都会原样输出,不会被解析
-
双引号:可以放除了$、`、\、"以外任意字符,其中的变量等会被解析
-
反引号:将其中的内容作为命令执行,如:
echo `date`
-
‘’:转义特定的字符,如:$、*、\、?、|、`、^、&
-
字符串长度:${#name}
-
字符串提取:${name:2:3},从变量name中下表为2的地方提取3个字符
数组类型
- 定义:
a=(1 2 3)
- 成员访问:
echo ${a[2]}
- 个数统计:
echo ${#a[@]}
- 所有元素:
echo ${a[*]}
seq
- 说明:生成指定范围的连续整数
- 示例:
seq 10
,生成1~10的连续整数,seq 2 10
,生成2~10的连续整数
expr
-
说明:运算一个表达式
-
示例:
expr 2 + 3 结果为5 echo `expr 3 + 5` 结果会打印8 expr 3 \* 5 结果为15,*需要转义
各种运算
-
test命令:成功为真,失败为假。
#!/bin/bash if test 1 -lt 2; then echo 'ok' fi if [ 1 -lt 2 ]; then echo 'okok' fi
-
数值比较运算
- -lt:小于
- -le:小于等于
- -gt:大于
- -ge:大于等于
- -eq:等于
- -ne:不等于
-
字符串测试
- =:相等
- !=:不相等
- -z:字符串的长度是否为0
- -n:字符串的长度是否不为0
-
文件判断
- -f:普通文件
- -d:目录文件
- -c:字符设备文件
- -b:块设备文件
- -w:是否可写
- -x:是否可执行
- -s:文件存在,并且至少有一个字符
-
逻辑运算
- -a:逻辑与(and),也可以使用&&来代替
- -o:逻辑或(or),也可以使用||来代替
- !:逻辑非
- 示例:
#! /bin/bash if [ 1 -lt 3 -a 2 -lt 3 ]; then echo 'ok' fi if [ 1 -lt 3 ] && [ 2 -lt 3 ]; then echo 'ok' fi if [ ! 1 -gt 3 ]; then echo 'xxx' fi
分支结构
-
if-elif-else:
#! /bin/bash if [ 8 -lt 3 ]; then echo '8 < 3' elif [ 8 -lt 9 ]; then echo '8 < 9' else echo 'xxx' fi
-
case:
#! /bin/bash read -p 'please input any charactor:' ch case $ch in [a-z]) echo 'alpha' ;; [0-9]) echo 'numberic' ;; *) echo 'others' ;; esac
循环结构
-
for-in 及 for
#! /bin/bash a=(1 2 3 4 5) # for x in a b c # for x in /etc/* # for x in `seq 1 10` for x in ${a[*]} do echo $x done for ((i=0;i<${#a[@]};i++)) do echo ${a[$i]} done
-
while
#! /bin/bash i=1 sum=0 while [ $i -le 100 ] do #((sum+=$i)) #((i++)) #let sum+=$i #let i++ sum=$[$sum+$i] i=$[$i+1] done echo $sum
-
until:条件成立,循环停止
#! /bin/bash i=1 until [ $i -gt 10 ] do echo $i ((i++)) done
-
break、continue自行学习
函数使用
-
demo(){ echo 'for func' } demo arg() { echo $1 echo $2 echo $* echo $# return 250 } arg abc def # $?表示函数的返回值 echo $?
除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog
精华推荐