Shell脚本整理

百分比计算


 1 #!/bin/bash
 2 a=38
 3 b=99
 4 
 5 percent_1=$(printf "%d%%" $((a*100/b)))
 6 # 或者
 7 percent_2=`awk 'BEGIN{printf "%.1f%%\n",('$a'/'$b')*100}'`
 8 # 保留1位小数,四舍五入
 9 echo $percent_1
10 echo $percent_2

运算符

运算符    说明         举例

+           加法         `expr $a + $b` 结果为 30。

-            减法         `expr $a - $b` 结果为 -10。

*            乘法         `expr $a \* $b` 结果为  200。

/            除法         `expr $b / $a` 结果为 2。

%          取余         `expr $b % $a` 结果为 0。

=           赋值         a=$b 将把变量 b 的值赋给 a。
--------------------- 

#提示“请输入姓名”并等待30秒,把用户的输入保存入变量name中

read -t 30 -p "请输入用户名称:" name
echo -e "\n"
echo "用户名为:$name"

常用的比较符

-----------------------整数比较

-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ] 
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ] 
-le 小于等于,如:if [ "$a" -le "$b" ]



> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))

---------------------------字符串比较

= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ],与=等价
注意:==的功能在[[]]和[]中的行为是不同的,如下:
1 [[ $a == z* ]] # 如果$a以"z"开头(模式匹配 )那么将为true
2 [ $a == "z*" ] # 如果$a等于z*(字符匹配 ),那么结果为true 
3
4 [ $a == z* ] # File globbing 和word splitting将会发生
5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true

$0: shell或shell脚本的名字
$*:以一对双引号给出参数列表
$@:将各个参数分别加双引号返回
$#:参数的个数
$_:代表上一个命令的最后一个参数
$$:代表所在命令的PID
$!:代表最后执行的后台命令的PID
$?:代表上一个命令执行后的退出状态

grep 同时满足多个关键字和满足任意关键字
① grep -E "word1|word2|word3"   file.txt
   满足任意条件(word1、word2和word3之一)将匹配。
② grep word1 file.txt | grep word2 |grep word3
   必须同时满足三个条件(word1、word2和word3)才匹配。

1、或操作

grep -E '123|abc' filename  // 找出文件(filename)中包含123或者包含abc的行
egrep '123|abc' filename    // 用egrep同样可以实现
awk '/123|abc/' filename   // awk 的实现方式

2、与操作

grep pattern1 files | grep pattern2 //显示既匹配 pattern1 又匹配 pattern2 的行。

3、其他操作

grep -i pattern files   //不区分大小写地搜索。默认情况区分大小写,
grep -l pattern files   //只列出匹配的文件名,
grep -L pattern files   //列出不匹配的文件名,
grep -w pattern files  //只匹配整个单词,而不是字符串的一部分(如匹配‘magic’,而不是‘magical’),
grep -C number pattern files //匹配的上下文分别显示[number]行,
单引 双引 反引用[] [[]]

将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n)

out=$(cat text.txt)

  输出1 2 3

  out="$(cat text.txt)"

  输出:

  1

  2

  3

1、字符串判断

str1 = str2      当两个串有相同内容、长度时为真
  str1 != str2      当串str1和str2不等时为真
  -n str1        当串的长度大于0时为真(串非空) if [[ -n $1 ]]
  -z str1        当串的长度为0时为真(空串)
  str1         当串str1为非空时为真

2、数字的判断

int1 -eq int2    两数相等为真
  int1 -ne int2    两数不等为真
  int1 -gt int2    int1大于int2为真
  int1 -ge int2    int1大于等于int2为真
  int1 -lt int2    int1小于int2为真
  int1 -le int2    int1小于等于int2为真

3 目录文件的判断(if [ ])

    -r file     用户可读为真
  -w file     用户可写为真
  -x file     用户可执行为真
  -f file     文件为正规文件为真
  -d file     文件为目录为真
  -c file     文件为字符特殊文件为真
  -b file     文件为块特殊文件为真
  -s file     文件大小非0时为真
  -t file     当文件描述符(默认为1)指定的设备为终端时为真

3、复杂逻辑判断

 -a         与
 -o        或
 !        非

下面是一些使用实例:

#!/bin/sh
  myPath="/var/log/httpd/"
  myFile="/var /log/httpd/access.log"

#这里的-x 参数判断$myPath是否存在并且是否具有可执行权限

if [ ! -x "$myPath"]; then
  mkdir "$myPath"
  fi

#这里的-d 参数判断$myPath是否存在

if [ ! -d "$myPath"]; then
  mkdir "$myPath"
  fi

#这里的-f参数判断$myFile是否存在

if [ ! -f "$myFile" ]; then
  touch "$myFile"
  fi

#其他参数还有-n,-n是判断一个变量是否是否有值

if [ ! -n "$myVar" ]; then
  echo "$myVar is empty"
  exit 0
  fi

#两个变量判断是否相等

 if [ "$var1" == "$var2" ]; then
  echo '$var1 eq $var2'
  else
  echo '$var1 not eq $var2'
  fi

----------------- 算数运算 let expr

l

et 可以直接执行基本的算数操作

no1=4

no2=5

let result=no1+no2

echo $result

let no1++

let no1+=6

操作符[] ,expr 和let命令类似

result=$[ no1 + no2 ]

result=$[ $no1 + $no2 ]

result=`expr 3 + 4`

result=$(expr $no1 + 5)

================ shell判断文件是否存在

shell判断文件,目录是否存在或者具有权限

  #!/bin/sh

  myPath="/var/log/httpd/"
  myFile="/var /log/httpd/access.log"

# 这里的-x 参数判断$myPath是否存在并且是否具有可执行权限

 if [ ! -x "$myPath"]; then
  mkdir "$myPath"
  fi

# 这里的-d 参数判断$myPath是否存在

 if [ ! -d "$myPath"]; then
  mkdir "$myPath"
  fi

# 这里的-f参数判断$myFile是否存在

 if [ ! -f "$myFile" ]; then
  touch "$myFile"
  fi

# 其他参数还有-n,-n是判断一个变量是否是否有值

 if [ ! -n "$myVar" ]; then
  echo "$myVar is empty"
  exit 0
  fi

# 两个变量判断是否相等

 if [ "$var1" = "$var2" ]; then
  echo '$var1 eq $var2'
  else
  echo '$var1 not eq $var2'
  fi

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值