Aprendizaje de shell simple Día 1

1. Tipos y precauciones de scripts de shell

Tipo: cat /etc/shells
bin/bash=======>Linux usa
bin/sh
bin/csh
bin/ksh de forma predeterminada

Nota: Es diferente de C y devuelve 0 para el éxito y 1 para el fracaso.
Buen hábito gramatical: al obtener el valor de una variable, generalmente agregue "VAR".

2. Ejecute el método del script.

1.chmod a+x shell.sh ./shell.sh
2./bin/bash shell.sh
3. . cáscara.sh

inserte la descripción de la imagen aquí
3. Instrucciones y Sintaxis
A. Variables

VAR=hola -- variable local (variable local) echo $VAR env | grep &VAR no tiene efecto
exportar VAR está configurado como variable de entorno (variable global) echo $VAR || env | grep &VAR tiene efecto
alias === cambiar el nombre del comando

B. Sustitución de mando

Comillas invertidas ====== Tecla ESC a continuación ------> reemplazar función
VAR= date----------------------->echo $VAR -- --> Función de fecha de llamada
( ) equivalente: VAR = () equivalente: VAR=( ) equivalente : V A R= (fecha)

C. Sustitución aritmética

VAR=33,eco $((VAR+3)) == eco ( ( ((( ( VAR+3)) == eco $[ VAR+3]
eco $[ 2#10 +11]//2 base 10+(decimal) 11

D. Carácter de escape: \

touch $\ \test.sh ---- > generar $ test.sh eliminar también es
touch ./-abc -abc
equivalente touch – -abc
touch ./-------xyz ------- xyz

F. Comillas simples, comillas dobles.

VAR= date
eco ' VAR ′ eco " VAR' eco "GUERRA _ _ echo"VAR"

G. Pruebas condicionales y símbolos de comparación.

VAR=2
prueba $VAR -gt 1
símbolo de comparación
-gt es mayor o no
-lt es menor que
-qt es mayor que
-eq es igual
a -ne no es igual a
-d es un directorio
-f es un directorio normal
-p archivo especial
-z para determinar si la cadena es 0
-n no es 0
H. y o no
-a es y &&
-o es ||
-x es ^
VAR=abc

F. Declaración de sucursal

si [-d t.txt]; entonces
内容
fi

Especial
si: ;entonces echo "siempre verdadero" ; fi
*** Nota: significa siempre verdadero

código de prueba

#! /bin/bash
echo "Is it morning? please answer yes or no"
#相当于fgets()
read YES_OR_NO
if [ "$YES_OR_NO" = "yes" ]; then
	echo "Good morning !"
elif [ "$YES_OR_NO" = "no" ]; then
	echo "Bad weather!!"
else
	echo "Sorry, $YES_OR_NO not recognize. Enter yes or no"
fi

inserte la descripción de la imagen aquí

caso “$VAR” en
y] ;;
N] ;;
] ;;
;;---->代表break
read -p "por favor ingrese el primer número n1 " n1

#! /bin/bash
echo "Is it morning? please answer yes or no"
#相当于fgets()
read YES_OR_NO
#取放到集合里面IN
case "$YES_OR_NO" in
#注意只有)2
yes|y|YES|Yes)
	echo "Good morning !";;
no|No)
	echo "Bad weather!!";;
*)
	echo "Sorry, $YES_OR_NO not recognize. Enter yes or no"
	return ;;
esac

inserte la descripción de la imagen aquí

Bucle
foreach - atravesar for/do/done
para algo en $@; hacer
hecho

#! /bin/bash
echo "Enter Yes or No"

for FILENAME in $(ls); do
	printf "$FILENAME "
	if [ -f "$FILENAME" ];then
		echo " "$FILENAME" is a file"
	else
		echo "It is not a file"
	fi
done 

mientras []; hecho
_

#! /bin/bash

count=3
echo "Enter password"
read TRY
while [ "$TRY" != "secret" -a $count -gt 0 ]
do
	count=$[count-1]
	echo "Sorry ,try again"
	read TRY
	
done

leer

read -p 读取控制台输入的值并赋予num1
read -p "please write a num " NUM1
echo "you write num is $NUM1"
-t是在规定时间为10秒内没有输入时就会直接执行下面的语句
read -t 10  -p "please write a num " NUM2
echo "the else num is $NUM2"

G. Construcción de funciones

#! /bin/bash
#一次创建多个目录,目录名字从参数中传进取,脚本测试目录是否存在,如果不存在,先打印不存在的信息然后创建该目录

is_directory()
{
	DIR_NAME=$1

	
		#从参数中判断
		if [ ! -d $DIR_NAME ]; then
			#如果文件存在则返回
			return 1
		else
			return 0
		fi
}

#命令行参数调用

for DIR in "$@"; do
	if is_directory "$DIR";then
		echo "file have already created "
	else
		echo "$DIR doesn't exist. Create it now..."

		#标准输出重建到黑洞里面不管创建成功还是失败他都会重定向到黑洞里面

		mkdir $DIR > /dev/null 2>&1
		#创建失败则退出程序
		if [ $? -ne 0 ]; then
			echo "Can't create directory $DIR"
			exit 1
		fi
	fi

done


H. Parámetros posicionales y variables especiales. ! !

$0 Obtener el nombre del archivo de ejecución
$nn toma 1-n para indicar los parámetros pasados ​​por el archivo de ejecución
$# Obtener el número total de parámetros
$* Imprime todos los parámetros en una línea
$@ Imprime n líneas de n parámetros para el para la declaración
$? Imprime la última ejecución El resultado de
$$ imprime el PID del script ejecutado
shift desplaza el parámetro hacia la izquierda
echo -n "hello\n" no analiza el carácter de escape
echo -e "hello\n" analiza el carácter de escape
G. redirección de tuberías y archivos
tee
ps aux | grep init | tee out ====>La información filtrada se almacena en el archivo de salida y se muestra en la pantalla

cmd > archivo
cmd >> archivo
cmd > archivo 2>&1> sin espacios después=> Redirigir salida como entrada estándar=> contenido del archivo
cmd < archivo > archivo2 === < redirigir el contenido del archivo a la pantalla y redirigir al archivo2 dentro de
wc -l test_if_case.sh > out
cat < test_if_case.sh > out
cmd < &fd === == ===> Tratar los descriptores de archivos como cmd de entrada estándar
> &fd ========> Tratar los descriptores de archivos como
cmd de salida estándar < &- Cerrar salida estándar

Supongo que te gusta

Origin blog.csdn.net/weixin_40178954/article/details/100585887
Recomendado
Clasificación