前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shell脚本编程

Shell脚本编程

作者头像
代码改变世界-coding
发布2018-09-27 15:46:45
9570
发布2018-09-27 15:46:45
举报
文章被收录于专栏:java相关
1.linux中的变量

linux中的变量分为环境变量和普通变量,其中环境变量可以理解为全局变量,在所有shell的子程序中都可以引用,普通变量只能在自己的shell程序中使用,程序结束后变量无法保留。

设置环境变量的方法:

1.export命令 用户退出后失效

代码语言:javascript
复制
export test=12312

2..bash_profile、.bashrc、etc/bashrc或者etc/profile中定义

代码语言:javascript
复制
用户的环境变量:
    ls /root/.bashrc(推荐文件)
    ls /root/.bash_profile
全局变量配置
    /etc/profile
    etc/bashrc(推荐)
    
所有环境变量应该为大写

查看环境变量:

代码语言:javascript
复制
env查看环境变量列表
set 输出所有变量(包括环境变量和普通变量)

unset消除环境变量

代码语言:javascript
复制
unset $PATH
2.变量定义
本地变量定义三种方法:

a=123+ $a 变量会被解析

代码语言:javascript
复制
a=123
b=123$a
echo $b

输出以下:

代码语言:javascript
复制
123123

a='123 + $a' 变量不会被解析,单引号中的字符串原样输出 a=123 b='123$a' echo $b

输出为:

代码语言:javascript
复制
123$a

a="123" 变量解析--一般用此种方法定义变量

代码语言:javascript
复制
a=123
b="123$a"
echo $b
命令结果作为变量的值(常见用法):
代码语言:javascript
复制
a=$(ls)
3.对于字符串的操作
输出字符串长度:

name="testName"

方法一:

代码语言:javascript
复制
echo ${#name}

输出结果:

代码语言:javascript
复制
8

方法二:

代码语言:javascript
复制
echo ${name}|wc -L

方法三:

代码语言:javascript
复制
expr length "${name}"
截取字符串内容:

首先定义字符串:

代码语言:javascript
复制
name=testNametestName

截取字符串:

代码语言:javascript
复制
echo ${name:2} 从第二位开始截取

输出结果:

代码语言:javascript
复制
stNametestName
字符串匹配
代码语言:javascript
复制
echo ${name#t*N} 从头开始最短匹配

输出为: ametestName

最长匹配:

代码语言:javascript
复制
echo ${name##t*N} 从头开始最长匹配

输出为: ame 从尾开始匹配:

代码语言:javascript
复制
echo  ${name%N*e}

输出为:

代码语言:javascript
复制
testNametest

最长匹配: echo ${name%%N*e} test

字符串的替换:
代码语言:javascript
复制
echo ${name/test/test1} 从头匹配替换第一个

echo ${name//test/test1} 从头匹配替换所有
将以下文件名中的all去掉
代码语言:javascript
复制
test-all-1.txt  test-all-2.txt  test-all-3.txt  test-all-4.txt  test-all.txt

脚本为:

代码语言:javascript
复制
 for f in $(ls *.txt)
    do
       mv ${f} ${f//all/}
    done
4.算术运算

方法一:

代码语言:javascript
复制
echo $((2+2))
4

方法二:

代码语言:javascript
复制
let a=12+12
echo ${a}
24

方法三:

代码语言:javascript
复制
expr 12 % 3
0

echo "123 122" |awk '{print ($1-$2)}'
$[]  echo $[12+12]  a=$[12+12+12]
5.条件判断语句:

方法一:

代码语言:javascript
复制
test
test -f test4.txt && echo true || echo false

方法二:

代码语言:javascript
复制
[]
[ -f test4.txt ] && echo true || echo false 文件test4.txt存在输出true,不存在输出false

方法三:

代码语言:javascript
复制
[[]] 括号前后加空格
[[ -f test4.txt ]] && echo true || echo false

字符串测试:

代码语言:javascript
复制
[ -z "" ] && echo false  -z 字符串长度为0的时候为真
[ -n "test" ] && echo true || echo false -n 字符串长度不为0的时候为真

[ "test" == "test" ] && echo true 字符串是否相等 同= !=

等号和中括号两端需要有空格

整数的比较:
[ 2 -eq 3 ] && echo true || echo false

逻辑操作符:
-a -o ! 与或非
[ 2 -eq 2 -a 3 -eq 3 ] && echo true || echo false
6.if条件语句
代码语言:javascript
复制
单分支结构:
if<条件表达式>
then
    指令
fi

if <条件表达式>; then
指令
fi

多分支:

代码语言:javascript
复制
if<条件表达式>
    then
else

fi

多分支:

代码语言:javascript
复制
if<条件表达式>
    then
elif<条件表达式>
    then
else
fi
7.shell函数

functiontest.sh脚本内容:

代码语言:javascript
复制
function testFun(){
        echo "function test! hello $1";
}

testFun $1

sh functiontest.sh testname

while和until循环

代码语言:javascript
复制
while<条件表达式>
do
    命令
done

until<表达式>
do
done

脚本后台运行:

代码语言:javascript
复制
sh functiontest.sh&
control + c 停止
control + z 暂停

for 语句

代码语言:javascript
复制
for((i=1;i<5;i++))
 do
   echo $i
done

select 语句

代码语言:javascript
复制
select name in ywp hf csq
do
    echo $name
done

break n 跳出整个循环 continue n 跳出本次循环

数组: array=(ywp hf jc yc) echo ${array[1]}

方法二:

代码语言:javascript
复制
array=([1]=one [2]=two [3]=threee )
echo ${array[1]}
echo ${array[*]} *打印整个数组的内容

for循环打印数组内容

代码语言:javascript
复制
 array=(test1 test2 test3)
 for name in ${array[*]}
 do
    echo ${name}
done

动态数组:

代码语言:javascript
复制
array=($(ls))
echo ${array[*]}
echo ${#array[*]} 打印数组长度
9.shell脚本开发规范
代码语言:javascript
复制
1.全局变量 全部大写
2.局部变量 驼峰
3.变量引用 ${}
4.字符串变量引用 "${}"
5.统一使用.sh命名
6.启动和停止统一使用start和stop开头
7.通用变量放在config目录下
8.中括号两边添加空格

shell脚本调试:

代码语言:javascript
复制
sh [-nvx] test.sh
-n 不执行,仅检查语法问题
-x将执行的脚本输出到屏幕上

vim 配置:

代码语言:javascript
复制
echo 'alias vi=vim' >>/Users/xxx/.bash_profile
source /Users/xxx/.bash_profile
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.linux中的变量
    • 2.变量定义
      • 本地变量定义三种方法:
    • 命令结果作为变量的值(常见用法):
    • 3.对于字符串的操作
      • 输出字符串长度:
        • 截取字符串内容:
          • 字符串匹配
            • 字符串的替换:
              • 将以下文件名中的all去掉
              • 4.算术运算
              • 5.条件判断语句:
              • 6.if条件语句
              • 7.shell函数
              • 9.shell脚本开发规范
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档