首页 > 系统相关 >Shell编程学习笔记

Shell编程学习笔记

时间:2023-04-27 22:44:58浏览次数:36  
标签:bin Shell 编程 笔记 echo 命令 fi val1 bash

变量

设置局部变量

变量名=变量值

设置全局变量

export 变量名=变量值

删除变量

unset 变量名

添加PATH环境变量

PATH=$PATH:[路径]

数组变量

mytest=(one two three four five)

echo $mytest
--->  one

显示数组某个位置的变量
echo ${mytest[2]}
--->  three

显示整个数组变量
echo ${mytest[*]}
--->  one two three four five

命令替换

有两种方法可以将命令输出赋给变量:

1、反引号字符(`)

2、$()格式(推荐)

#!/bin/sh
testing=$(date)
echo "The date and time are: " "$testing"
testing2=`date`
echo "The date and time are: " "$testing2"

重定向输入与输出

输出重定向

最基本的重定向将命令的输出发送到一个文件中。bash shell用大于号(>)来完成这项功能

command > outputfile

如果输出文件已经存在了,重定向操作符会用新的文件数据覆盖已有文件

输入重定向

command < inputfile

数学运算

使用 $((expression))

#!/bin/bash
var1=$((1+5))
echo ${var1}

只支持整数运算,浮点运算需要使用bc,待补充

退出脚本

Linux提供了一个专门的变量$?来保存上个已执行命令的退出状态码。对于需要进行检查的 命令,必须在其运行完毕后立刻查看或使用$?变量。它的值会变成由shell所执行的最后一条命令 的退出状态码。

image

exit 命令

默认情况下,shell脚本会以脚本中的最后一个命令的退出状态码退出。

可以改变这种默认行为,返回自己的退出状态码。exit命令允许你在脚本结束时指定一 个退出状态码

#!/bin/bash
var1=10
var2=30
var3=$[$var1 + $var2]
echo The answer is $var3
exit 5

if-then

if command 
then 
	commands
fi

if语句会运行if后面的那个命令。如果该命令的退出状态码是0 (该命令成功运行),位于then部分的命令就会被执行。如果该命令的退出状态码是其他值,then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。fi语句用来表示if-then 语句到此结束。

if-then-else

if command 
then 
	commands
else commands
fi

当if语句中的命令返回退出状态码0时,then部分中的命令会被执行,这跟普通的if-then 语句一样。当if语句中的命令返回非零退出状态码时,bash shell会执行else部分中的命令。

嵌套 if

if command1
then 
 commands
elif command2
then 
 more commands
fi 

数值比较

image

value1=10
value2=11

if [ $value1 -gt 5 ]
then
 echo "The test value $value1 is greater than 5"
fi


if [ $value1 -eq $value2 ]
then
 echo "The values are equal"
else
 echo "The values are different"
fi

字符串比较

image

比较字符串是否相等

#!/bin/bash
testuser=rich
#
if [ $USER = $testuser ]; then
  echo "Welcome $testuser"
else
  echo "who are you"
fi

比较字符串大小

#!/bin/bash
val1=baseball
val2=hockey
if [ $val1 \> $val2 ]
then
 echo "$val1 is greater than $val2"
else
 echo "$val1 is less than $val2"
fi

判断是否为空

-n和-z可以检查一个变量是否含有数据

#!/bin/bash
# testing string length
val1=testing
val2=''
if [ -n "$val1" ]
then
 echo "The string '$val1' is not empty"
else
 echo "The string '$val1' is empty"
fi
#
if [ -z "$val2" ]
then
 echo "The string '$val2' is empty"
else
 echo "The string '$val2' is not empty"
fi
#
if [ -z "$val3" ]
then
 echo "The string '$val3' is empty"
else
 echo "The string '$val3' is not empty"
fi

文件比较

image

复合条件测试

if-then语句允许你使用布尔逻辑来组合测试。有两种布尔运算符可用

[ condition1 ] && [ condition2 ]
[ condition1 ] || [ condition2 ]

使用双括号

双括号命令允许你在比较过程中使用高级数学表达式

image

#!/bin/bash
val1=10
if (($val1 ** 2 > 90)); then
  ((val2 = $val1 ** 2))
  echo "The square of $val1 is $val2"
fi

使用双方括号

双方括号命令提供了针对字符串比较的高级特性。

#!/bin/bash
if [[ $USER == r* ]]; then
  echo "Hello $USER"
else
  echo "Sorry, I do not know you"
fi

case 命令

case命令会将指定的变量与不同模式进行比较。如果变量和模式是匹配的,那么shell会执行 为该模式指定的命令。可以通过竖线操作符在一行中分隔出多个模式模式。星号会捕获所有与已 知模式不匹配的值。

#!/bin/bash
case $USER in
rich | barbara)
  echo "Welcome, $USER"
  echo "Please enjoy your visit"
  ;;
testing)
  echo "Special testing account"
  ;;
jessica)
  echo "Do not forget to log off when you're done"
  ;;
*)
  echo "Sorry, you are not allowed here"
  ;;
esac

for命令

for var in list 
do 
 commands 
done
#!/bin/bash
for test in Alabama Alaska Arizona Arkansas California Colorado; do
  echo The next state is $test
done

读取复杂的值

添加了反斜线字符来转义don't中的单引号。将this'll用双引号圈起来。

#!/bin/bash
for test in I don\'t know if "this'll" work; do
  echo "word:$test"
done

for命令用空格来划分列表中的每个值。如果在单独的数据值中有 空格,就必须用双引号将这些值圈起来。

#!/bin/bash 
# an example of how to properly define values 
for test in Nevada "New Hampshire" "New Mexico" "New York" 
do 
 echo "Now going to $test" 
done

从变量读取值

#!/bin/bash
list="Alabama Alaska Arizona Arkansas Colorado"
list=$list" Connecticut"
for state in $list; do
  echo "Have you ever visited $state?"
done

从命令读取值

#!/bin/bash
file="states"
for state in $(cat $file); do
  echo "Visit beautiful $state"
done

更改字段分隔符

IFS环境变量定义了bash shell用作字段分隔符的一系列字符。默认情况下,bash shell会将下列字 符当作字段分隔符:

空格 制表符 换行符

如果bash shell在数据中看到了这些字符中的任意一个,它就会假定这表明了列表中一个新数据字段的开始。

#!/bin/bash 
file="states" 
IFS=$'\n' 
for state in $(cat $file) 
do 
 echo "Visit beautiful $state" 
done

用通配符读取目录

#!/bin/bash
for file in /home/rich/test/*; do
  if [ -d "$file" ]; then
    echo "$file is a directory"
  elif [ -f "$file" ]; then
    echo "$file is a file"
  fi
done

标签:bin,Shell,编程,笔记,echo,命令,fi,val1,bash
From: https://www.cnblogs.com/panxianhao/p/17360451.html

相关文章

  • 【牛客编程题】Python机器学习(入门例题5题)
    【牛客编程题】Python机器学习(入门例题5题)做题链接:https://www.nowcoder.com/exam/oj?page=1&tab=Python篇&topicId=329文章目录AI1鸢尾花分类_1AI2鸢尾花分类_2AI3决策树的生成与训练-信息熵的计算AI4决策树的生成与训练-信息增益AI5使用梯度下降对逻辑回归进行训练AI1鸢尾......
  • 【牛客编程题】shell34题(Linux awk,grep命令)
    【牛客编程题】shell34题(Linuxawk,grep命令)SHELL01-22:基本文本处理SHELL23-28:nginx日志分析SHELL29-32:netstat练习做题链接:https://www.nowcoder.com/exam/oj?page=1&tab=SHELL%E7%AF%87&topicId=195参考资料:https://github.com/jaywcjlove/linux-command文章目录从awk命令开始对......
  • 四月读书笔记1
    四月读书笔记1    《人月神话》告诉我们要管理一个项目,首先需要制定严格的进度表。而在现实的工作中,不少的项目在存有明确完成时间的前提下,往往是从预计完成时间倒推制定进度表——先设定几个节点,按照估计赋予它们预计完成的时间,然后各部门分头行动——定期或不定期的碰头......
  • 使用Spring进行面向切面(AOP)编程
    基础知识:【要进行AOP编程,首先我们要在spring的配置文件中引入aop命名空间:<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework......
  • Django笔记十六之aggregate聚合操作
    本文首发于公众号:Hunter后端原文链接:Django笔记十六之aggregate聚合操作这一篇笔记介绍一下关于聚合的操作,aggregate。常用的聚合操作比如有平均数,总数,最大值,最小值等等用到的model如下classAuthor(models.Model):name=models.CharField(max_length=100)ag......
  • FFT笔记
    FFT笔记前言:这个算法对于我来讲比较抽象、高深,因为里面涉及了一些复数等一些对我而言很难很难的知识。终于,花了几节文化课的时间冥思苦想,终于算是搞懂一点了。所以我决定趁脑子清醒的时候记录下来。与其他文章不同的是,本文可能没有太多的公式证明,主要是以通俗易懂的方式去讲......
  • Django笔记三十二之session登录验证操作
    本文首发于公众号:Hunter后端原文链接:Django笔记三十二之session登录验证操作这一篇笔记将介绍session相关的内容,包括如何在系统中使用session,以及利用session实现登录认证的功能。这篇笔记将分为以下几个内容:session的使用流程session的配置和相关方法users模块......
  • 2023.4.27编程一小时打卡
    一、问题描述:建立一个向量容器的实例s,不断对s调用push_back向其中增加新的元素,观察在此过程中s.capacity()的变化。二、解题思路:首先,编写一个向量容器vector<int>s,利用循环对其进行不断调用push_back,再输出它的capacity()函数观察它向量容器的容量的变化。三、代码实现:1#in......
  • CDQ分治学习笔记
    CDQ分治学习笔记目录CDQ分治学习笔记前言CDQ分治思想例题1、翻转对分析codeP3810三维偏序(陌上花开)输入格式输出格式样例#1样例输入#1样例输出#1提示分析code前言之前在gdkoi讲解是有人用\(CDQ\)分治A了day1T3。好像分治FFT要用到,而且其他人都学过了,所以蒟蒻再次恶补一手......
  • 0/1分数规划学习笔记
    #0/1分数规划学习笔记——bysunzz3183------------##介绍$0/1$分数规划是指,给定整数$a_1,a_2,\cdots,a_n,b_1,b_2,\cdots,b_n$,求一组解$x_i,x_i\in\left\{0,1\right\}$,使下面的式子最大化:$$\frac{\sum_{i=1}^{n}a_i\timesx_i}{\sum_{i=1}^{n}b_i\timesx_i......