变量
nano hello.sh 编辑hello.sh这个shell脚本文件,如写上echo 'hello!!!'。其中,在编辑的最开始加上#!/bin/bash 表示该脚本文件用bash执行,#是注释,#!不是注释。
bash/source/. hello.sh 执行hello.sh,如输出hello!!!
name=zs 定义用户自定义变量name
echo $name 输出用户自定义变量的值为zs
env 查看环境变量
export name 将name用户自定义变量变成环境变量
readonly name 设置name变量为只读
unset name 清除name变量
current_dir=$(pwd) 将pwd执行的结果赋值给current_dir,也可以current_dir=`pwd`(反引号)。
read name 从键盘输入name(read -p "Please input your name:" name就提示键盘输入name)。
read name1 name2 other 输入多个变量,other用于存多输入的变量
echo -e "zs\nzss" 加上-e才能处理转义字符
echo -n "zs" 加上-n则取消默认的末尾换行
变量计算
数的比较
整数计算
expr $a + $b 计算a+b,因linux默认都是字符串故不能直接计算(注意如大于要\>,乘要\*转义)。
c=`expr $a + $b` 通过命令替换将计算结果赋值给c
c=$((a + b)) 或let c=a+b 计算a+b赋值给c(这里运算符+前后可加或不加空格)
浮点数计算
c=$(echo "$a+$b" | bc) 用管道给bc计算浮点数a+b,也可以单独写bc然后边读边计算浮点数。
c=`echo "$a+$b" | bc` 用反引号命令替换也可以计算浮点数a+b然后赋值给c
字符串比较
逻辑运算
与:-a,或:-o
左移
shift 1 将变量左移1个,比如$2变成$1,$3变成$2以此类推($1等是位置参数,$?存返回值)。
字符串分割
set -- -rw-r--r-- 1 root root 10272 May 25 10:34 /etc/passwd 执行后$1即-rw-r--r--,$2即1,$3即root以此类推(加--是因-rw-r--r--最前面的-会被识别为option故要前再加--让识别为字符串)。
分支结构
if [ $a -ge $b ] then ... fi或if test $a -ge $b then ... fi 中括号那要有空格,即c中的if(a>=b){...}。
if [ $a -ge $b ] then ...elif [ 条件 ];then...else... fi then即c中的{,fi即},then不换行时前要加;。
if ((x%2==0)) 判断x是否是偶数((( expression )) 用于进行数值比较和运算)。
循环结构
for i in zs lisi do...done 两次循环,第一次i即zs,第二次i即lisi,do前有换行,类比python的for。
for i in `seq 1 2 10` do...done 从1到10步长为2的循环,删2则步长为1,类比range但此闭区间。