首页 > 系统相关 >Shell Scripts

Shell Scripts

时间:2023-09-28 18:22:27浏览次数:30  
标签:arr shell 变量 echo festu Shell user Scripts

Shell Scripts

Shell 编程笔记

基本语法模块

指定脚本解析器

#!/bin/bash
#!/bin/sh

bash 是最常用的解析器,sh 等其他 shell 解析器与 bash 有语法上的区别

变量

  • 变量名:字母、数字、下划线,数字不可开头

  • 变量赋值:

    user="festu"
    user=festu"festu"	# festufestu
    user = festu # 赋值失败
    

    字符串常量可以不带双引号,连接字符串不用 + (会被识别为字符串内容)

  • 变量引用:

    echo $user
    echo ${user}
    echo "$user"
    echo "${user}"	# 推荐
    

    双引号包裹可以避免很多奇怪的错误,例如它会解析变量中的换行与换行符。

普通数组

arr=(A B "C" D)
echo ${arr[0]} # A

关联数组

declare -A rel_arr=(
	["name"]="festu"
	["gender"]="Male"
)
  • @, * 可以获取数组中的所有元素

    echo ${arr[@]}
    echo ${arr[*]}
    
  • ${#arr[@]} 获取数组长度

  • ${arr:2:3} 截取数组元素,从下标 2 开始截取 3 个

特殊变量

$0:执行文件名
$1:传入的参数1
$#:参数个数
$*:"$*" == “$1 $2...”
$@:"$1" "$2" "$3"...
$$:脚本进程号
$?:最后命令的退出状态

语句

条件-IF

if [ $a >= $b ]; then
 echo "a is biiger"
elif [ $a != $b ]; then
 echo "a is smaller"
else
 echo "a and b is equal"
fi

条件-Case

read -p "Hello! Input your optoins:" opt
case $opt in
 Y|y)
  #....
  ;;
 N|n)
  #...
  ;;
 <pattern>)
  #...
  ;;
 *)
  #...
  ;;
esac
  • 第一行语句从标准输入读取内容,传递给 opt 变量。
  • <pattern> 支持解析正则表达式,无需引号包裹。
  • *) 表示 default
  • ;; 表示 break

循环-For

# 也支持 i+=1
for ((i=1;i<=100;i++))
do
	echo $i
done

特殊符号

  • $(),``,${} 会返回内部命令/语句的输出:

    echo `echo 123`	# 123
    
  • $<str> 获取变量内容

    $[] 获取算数表达式的结果:

    a=$[ 1+2 ]
    echo $a	# 3
    

算术运算

支持数字运算

number=$()

+
-
*
/
%: 取余
=: 赋值
==: 相等
!=: 不相等

比较运算

方括号括起表示一个比较运算:

[ $a -eq $b ]

需要注意充足的空格,与其他语句耦合时也要有空格,如:

if [ $a -eq $b ];then
	# do sth...
fi

数字(关系)

[ $a -gt $b ]

-eq:=
-ne:<> != ~=
-gt:>
-lt:<
-ge:>=
-le:<=

布尔

[ $a -lt 20 -o $b -gt 100 ]

!: 非
-o: 或运算
-a: 与运算

逻辑

[ -z $a ] && [ -z $b ]

&&
||

字符串

[ -z $a ] 
[ $a = $b ]
[ $a ]

-z:长度是否为0
-n:长度是否不为0 | 参数是否不为空
=:是否相等
!=:是否不相等
$:是否不为空

文件

[ -b $file ]
-b:块设备
-c:字符设备
-d:目录
-f:普通文件
-g:有无设置SGID
-k:有无设置sticky
-p:有名管道
-u:有无设置SUID
-r:可读
-w:可写
-x:可执行
-s:为空
-e:是否存在

高级比较

高级表达式也有空格要求

[[]] 支持字符串的高级表达式(有些 shell 不支持):

[[ $fileName == test* ]]
[[ $fileName != test* ]]
# 需要在比较运算符两侧添加适当的空格来获得正确的结果

(()) 支持高级数学表达式:

(( $a-$b++ >= $c<<2 ))

var++
var--
++var
--var
!
~: 按位求反
**: 幂
<<
>>
&
|
&&
||

多文件编程

# 加载其他 shell 脚本
source other.sh
. other.sh
  • 在交互式 shell 中加载会更新环境变量中的变量与函数。
  • . 的效果和 source 一样,用于加载 shell 脚本。

标签:arr,shell,变量,echo,festu,Shell,user,Scripts
From: https://www.cnblogs.com/Forest-set-you/p/17736314.html

相关文章

  • 玩转Redhat Linux 8.0系列 | 使用BASH SHELL执行命令
    今天继续分享一些RedhatLinux8.0的知识,记得关注,会一直更新~基本命令语法GNUBourne-AgainShell(bash)这一程序可以解读用户键入的命令。当您准备好执行命令时,请按Enter键。在单独的行上键入每个命令。系统会显示命令输出,然后显示下一shell提示符。[user@host]$whoamiuser[u......
  • [Linux] shell文本处理记录 - 查找、增删特定行及附近行
    转:https://blog.csdn.net/wy_hhxx/article/details/127416595查找username所在行并删除此行,输出到新文件sed'/username/,+d'04filename.log>04filename_new.log 目录1.grep查找关键字所在行号、查找关键字前后行2.sed删除指定行及其前后若干行3.sed在匹配行前或后添......
  • Powershell 获取AD Certificate 详细信息
    get-aduser-SearchBase$ou-Filter*-Propertiesdisplayname,usercertificate|ForEach-Object{$displayname=$_.displayname$_|select-ExpandPropertyusercertificate|ForEach-Object{$cert=[System.Security.Cryptography.X509Certifi......
  • shell遍历比较文件夹下文件md5值
    #!/bin/bashCURRENT_DIR=$(cd$(dirname$0);pwd)SOURCE_DIR="$CURRENT_DIR/python_data"TARGET_DIR="$CURRENT_DIR/out_bin"cd$SOURCE_DIR>python.md5forfilein$(ls$SOURCE_DIR|grep"data")dosource_file=${SOURCE_......
  • 掌握Shell用户管理,让你的系统运行更顺畅!
    用户帐号帐号操作主要是增、删、改、禁。Linux系统提供了底层的 useradd, userdel 和 usermod 来完成相关操作,也提供了进一步的简化封装:adduser, deluser。为了避免混淆,咱们这里只介绍最底层的指令,这些指令设计上已经够简洁明了方便。由于只有系统管理员才能创建新用户,请确......
  • How to add a string that contains whitespace to array in shell script All In One
    HowtoaddastringthatcontainswhitespacetoarrayinshellscriptAllInOneIhavetriedsomewaystoaddastringwhichcontainwhitespacetoarrayinshellscript,butfailed.stringvariablesconcatenate#!/usr/bin/envbashstr1="hello&qu......
  • linux-Shell将命令行终端输出结果写入保存到文件中
    (一)将输出与错误写到同一个文件(1)方法1#!bin/bashjava-jarhbase-example.jar2>&1|teehbase_log.txt说明:0,1,2:在linux分别表示标准输入、标准输出和标准错误信息输出。tee默认为写入覆盖,-a参数表示追加内容。#!bin/bashjava-jarhbase-example.jar2>&1|tee-ahbase_......
  • Linux shell编程学习笔记1:关于shell的前世今生
    一、什么是Shell?Shell英文单词的原意是“外壳”,在计算机领域专指在操作系统(OperatingSystem)外层,提供用户界面(UserInterface)的程序,主要负责将用户的命令(Command)转化为操作系统可识别的指令(Instruction)。二、UnixshellUnix诞生于1969年,是最早提供shell,从而将操作系统和用户界面......
  • pycharm无法打开终端:open Local Terminal_Failed to start [powershell.exe]
    今天在运行pycharm的时候出现了这个问题openLocalTerminal_Failedtostart[powershell.exe]直接上解决办法1.进入设置2.选择tools下的terminal然后修改shellpath 如果没有的话需要找到本机的powershell的路径然后对其进行修改就能正常运行了  ......
  • Linux shell script if condition control flow methods All In One
    LinuxshellscriptifconditioncontrolflowmethodsAllInOneif...then...fi/if...then...else..fi/if...then...elif...then...fi#!/usr/bin/envbashifbugthenecho"bug✅"elseecho"bug❌"fiifpwdthenecho"pwd......